2012-05-03 2 views
0

1) В C++ предоставляется список инициализаторов {} так же, как {0}? Будут ли заявления:Как можно инициализировать инициализацию массива C++?

int x[10]={};

int x[10]={0};

и производят один и тот же массив со всеми элементами инициализируется до 0?

2) В системах/компиляторах, где NULL не равно 0, выполняют ли инициализации по умолчанию массивы указателей, устанавливают элементы в NULL или 0? Какие из следующих утверждений следует/можно использовать?

int *x[10]={NULL};

int *x[10]={0};

int *x[10]={};

Как насчет new оценочных Инициализаторов используя пустые скобки - они используют NULL или 0, как инициализатор?

int **x=new int*[10]();

+0

Для # 2 необходимо использовать значение nullptr', если C++ 11. – chris

+1

Почему вы не попробуете его и не увидите, что вы получаете –

+0

'NULL' равно 0 на всех компиляторах, соответствующих стандарту C++. – dreamlax

ответ

5
  1. Да. Оба эти инициализатора эквивалентны по функциональности. Разница в том, что вторая явно инициализирует первый элемент до 0 и неявно присваивает значения всем оставшимся элементам в массиве (что в случае int означает, что они устанавливают их на 0).

  2. NULL0 для всех компиляторов, соответствующих стандарту C++. В этом случае все три одинаковы с точки зрения функциональности. NULL - это макрос, который расширяется до 0, поэтому первые два идентичны в глазах компилятора. Я не уверен, что сделка будет с C++ 11, но инициализация значения указателя означает установку указателя на NULL.

Смежные вопросы