C ++ 03中的支持初始化

时间:2014-10-21 23:28:51

标签: 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;

}

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

1 个答案:

答案 0 :(得分:5)

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

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

  

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

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