Примітки C ++: Ініціалізація масиву містить хороший список щодо ініціалізації масивів. Я маю
int array[100] = {-1};
очікуючи, що він буде повним -1, але його немає, тільки перше значення є, а решта 0 змішані зі випадковими значеннями.
Код
int array[100] = {0};
працює просто чудово і встановлює кожен елемент 0.
Що мені тут не вистачає? Не можна його ініціалізувати, якщо значення не дорівнює нулю?
І 2: Чи ініціалізація за замовчуванням (як зазначено вище) швидше звичайного циклу через весь масив і присвоює значення чи робить це те ж саме?
{0}
не є особливим випадком для конструкцій і масивів. Правило полягає в тому, що елементи без ініціалізатора ініціалізуються так, ніби вони були 0
для ініціалізатора. Якщо є вкладені агрегати (наприклад struct x array[100]
), то ініціалізатори застосовуються до неагрегаторів у порядку "основний рядок"; підтяжки можуть додатково пропускати це. struct x array[100] = { 0 }
діє в С; та дійсна в C ++ до тих пір, поки перший член struct X
приймає 0
як ініціалізатор.
{ 0 }
не є особливим для C, але набагато складніше визначити тип даних, який неможливо ініціалізувати з ним, оскільки немає конструкторів і, отже, немає можливості зупинитись 0
від того, щоб неявно перетворити та призначити щось .