Эта программа должна правильно инициализировать строку в C ++ 03?
#include <iostream>
#include <string>
struct A
{
std::string s;
};
int main()
{
A a = { };
std::cout << a.s.size() << std::endl;
}
Используя bcc32 6.70, вывод 256
и проверяя строку в отладчике, его внутренние указатели выглядят как адреса мусора.
A
является совокупный и C ++ 03 позволяет инициализировать агрегаты, используя фигурный список инициализаторов. Если список инициализаторов пуст, то каждый элемент агрегата является инициализированным значением.
Из C ++ 03 [Dcl.init.aggr] / 8
… Пустой список инициализаторов можно использовать для инициализации любого агрегата. Если агрегат не является пустым классом, то каждый член агрегата должен быть инициализирован значением вида
T()
(5.2.3), гдеT
представляет тип неинициализированного члена.
В вашем примере std::string
элемент должен быть инициализирован по умолчанию.