Брикетированная инициализация в C ++ 03

Эта программа должна правильно инициализировать строку в 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 и проверяя строку в отладчике, его внутренние указатели выглядят как адреса мусора.

1

Решение

A является совокупный и C ++ 03 позволяет инициализировать агрегаты, используя фигурный список инициализаторов. Если список инициализаторов пуст, то каждый элемент агрегата является инициализированным значением.

Из C ++ 03 [Dcl.init.aggr] / 8

… Пустой список инициализаторов можно использовать для инициализации любого агрегата. Если агрегат не является пустым классом, то каждый член агрегата должен быть инициализирован значением вида T() (5.2.3), где T представляет тип неинициализированного члена.

В вашем примере std::string элемент должен быть инициализирован по умолчанию.

5

Другие решения


По вопросам рекламы [email protected]