C++ 03中的支持初始化

M.M*_*M.M 1 c++ c++03 c++builder-xe5

这个程序是否应该在C++ 03中正确初始化字符串?

#include <iostream>
#include <string>

struct A
{
    std::string s;
};

int main()
{
    A a = { };
    std::cout << a.s.size() << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

使用bcc32 6.70,输出是256,并检查调试器中的字符串,其内部指针似乎是垃圾地址.

Pra*_*ian 5

A是一个聚合,C++ 03允许使用支撑的初始化列表初始化聚合.如果initializer-list为空,则聚合的每个成员都是初始化值.

来自C++ 03 [dcl.init.aggr]/8

...空初始化列表可用于初始化任何聚合.如果聚合不是空类,则聚合的每个成员应使用形式T()(5.2.3)的值初始化,其中T表示未初始化成员的类型.

在您的示例中,std::string成员应默认初始化.