Гарантировано ли size[test] 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 Семантика инициализаторов следующая.
— Если инициализатором является (), объект инициализируется значением.
8.5.7 Чтобы инициализировать значение объекта типа T, необходимо:
- если T является типом класса (возможно, cv-квалифицированным) ...
- если T является (возможно, cv-квалифицированным) типом класса без объединения ...
— если T — тип массива, то каждый элемент инициализируется значением;
— в противном случае объект инициализируется нулями.
8.5.5 Чтобы обнулить объект или ссылку типа T, необходимо:
— если T — скалярный тип (3.9), объекту присваивается значение 0 (ноль), взятое как интегральное константное выражение, преобразованное в T;
person
NPE
schedule
20.01.2012