Является ли размер [тест] гарантией быть 10 в конце этой последовательности?
Да. В последней строке кода, size[test]
значение инициализирует элемент T()
, или в данном случае size_t()
:
C++ 11 23.4.4.3 карта доступа элемент [map.access]
T& operator[](const key_type& x)
;
1 Эффекты: Если на карте нет ключа, эквивалентного x, вставляет значение value_type (x, T()).
Как T()
, точный язык является немного запутана, поэтому я попытаюсь процитировать соответствующие биты:
C++ 11 8.5.16 Семантика инициализаторах заключаются в следующем.
- Если инициализатор is(), объект инициализируется значением.
8.5.7 Для значение инициализации объект типа Т означает:
- если Т (возможно, резюме квалифицированных) тип класса ...
- если T является классом типа un-union (возможно, cv-квалифицированным) ...
- если T - тип массива, то каждый элемент Значение инициализирован;
- В противном случае объект инициализируется нулем.
8.5.5 Для нулевой инициализации объект или ссылка типа Т означает:
- если Т представляет собой тип скаляр (3.9), объект установлен в значение 0 (ноль), взятое как интегральное постоянное выражение, преобразованное в T;
Я прочитал эту часть документов, но я не был уверен в ее последствиях. Что означает «построенный по умолчанию» для интегрального типа, такого как size_t? (Можете ли вы привести стандарт, желательно?) – Suma
@Suma: интегральные типы не являются типами классов, поэтому у них нет конструкторов. Инициализация значений этих типов равна нулевой инициализации. (Глава 8.) –
@KerrekSB вы уверены, что не путаете C++ с Java? Встроенные объекты по умолчанию не имеют нуля. – spraff