plo*_*ong 5 c++ aggregate initializer
可以创建一个通过构造函数参数初始化的匿名对象,例如在下面的return语句中.
struct S {
S(int i_, int j_) : i(i_), j(j_) { }
int i, j;
};
S f()
{
return S(52, 100);
}
int main()
{
cout << f().i << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,是否可以类似地创建一个使用大括号初始化程序初始化的匿名聚合?例如,可以将f()的主体折叠到下面,直到单个return语句而没有"s"吗?
struct S {
int i, j;
};
S f()
{
S s = { 52, 100 };
return s;
}
int main()
{
cout << f().i << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不是在C++中.但是你可以在C99中使用所谓的复合文字:
struct S {
int i, j;
};
struct S F()
{
// Valid C99, invalid C++:
return (struct S){ 52, 100 };
}
Run Code Online (Sandbox Code Playgroud)
[C99:§6.5.2,6.5.2.5]
[C++ 98:§5.2.3,8.5,12.1,12.2]
一些C++编译器将其作为扩展提供,但它不是合法的ISO C++ 98.例如,g ++默认接受此代码,但如果使用该-pedantic选项进行编译,它将拒绝它.