这个程序是否应该在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
,并检查调试器中的字符串,其内部指针似乎是垃圾地址。
答案 0 :(得分:5)
A
是aggregate,C ++ 03允许使用支撑的初始化列表初始化聚合。如果initializer-list为空,则聚合的每个成员都被初始化值。
来自C ++ 03 [dcl.init.aggr] / 8
...空初始化列表可用于初始化任何聚合。如果聚合不是空类,则聚合的每个成员都应使用
T()
(5.2.3)形式的值进行初始化,其中T
表示未初始化成员的类型。< / p>
在您的示例中,std::string
成员应默认初始化。