Примечания 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; и действует в C ++ до тех пор, пока первый член struct X
принимает в 0
качестве инициализатора.
{ 0 }
не является особенным в C, но намного сложнее определить тип данных, который не может быть инициализирован с ним, так как нет конструкторов и, следовательно, нет способа остановить 0
неявное преобразование и присвоение чему-либо .