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