Следната верига на цитати на C ++ стандарт, която обяснява как масив елементи са инициализирани по време на инициализация на тип масив
Първото нещо, което трябва да забележите е, че масиви са модулни видове. Ето защо, на адреса в раздела, който описва инициализацията на съвкупните видове 8.5.1 инертни материали:
7 Ако има по-малко инициализиране клаузи в списъка от там са членове в съвкупност, а след това всеки член не е изрично инициализира се инициализира от скобата му-или-или equalinitializer, ако няма скоба или по-equalinitializer от празен списък с инициализатор (8.5.4).
Този откъс от стандарта казва, че ако се инициализират по-малко от елементите в масива, елементите на масивите, които нямат изрично инициализатор се инициализират, като че ли той е празен фигурни скоби за всеки елемент. Това означава, че той може да бъде представен, както следва:
Сега ние се обръщаме към обяснение на стандарта, което означава, че когато има празни скоби. В секция №3 раздел 8.5.4 Списък инициализация, е писано
- В противен случай, ако списъкът за инициализатор още няма елементи, обектът е стойност инициализира
Каква е стойността инициализира. Писано е в раздел 8.5 инициализатори стандарт
8 За стойност инициализира обект от тип Т означава:
- в противен случай, обектът се нулева инициализира.
Накрая, понятието нула-инициализират средства (8.5 инициализират)
6 до нула-инициализира обект или позоваване на тип Т означава:
- ако Т е тип скаларна (3.9), обектът се инициализира на стойността, получена чрез преобразуване на цяло число буквално 0 (нула) до Т;
Това означава, че всички елементи на масива, които не са определени изрично инициализатори се инициализират до нула. Така че в крайна сметка този пост
еквивалентна на следната позиция:
И, накрая, ние откриваме, че записът
Имайте предвид, че в С последните две записите не са равностойни. За влизането на езика С
Погрешно е и компилаторът ще издаде съобщение за грешка.
Свързани статии