可以创建一个通过构造函数参数初始化的匿名对象,例如在下面的 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;
}
但是,是否可以类似地创建一个用大括号初始化器初始化的匿名聚合?例如,是否可以将下面的 f() 主体压缩为一个没有“s”的 return 语句?
struct S {
int i, j;
};
S f()
{
S s = { 52, 100 };
return s;
}
int main()
{
cout << f().i << endl;
return 0;
}
最佳答案
您不能在当前版本的 C++ 中使用。你将能够在 C++ 0x 中——无论如何我相信。当然,它仍然可以修改——曾经我相信你可以在 C++ 0x 中指定概念,但那已经不存在了……
编辑:引用将是 N2960 中的 [dcl.init] (§8.5/1) .最相关的一点是 BNF 中“braced-init-list”的定义(以及文本的最后一点,表示该部分中描述的初始化可以/确实适用于返回值)。
关于c++ - 我可以在 C++ 中创建一个匿名的、大括号初始化的聚合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596837/