1

该程序是否应该在 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,并在调试器中检查字符串,其内部指针似乎是垃圾地址。

4

1 回答 1

5

A是一个聚合,C++03 允许使用大括号初始化器列表来初始化聚合。如果初始化列表为空,则聚合的每个成员都被初始化。

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

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

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

于 2014-10-21T23:41:57.143 回答