c++ - 我可以在 C++ 中创建一个匿名的、大括号初始化的聚合吗?

标签 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;
}

但是,是否可以类似地创建一个用大括号初始化器初始化的匿名聚合?例如,是否可以将下面的 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/

相关文章:

json - 如何将现有函数(包括聚合)包装到 Postgres 中的新函数中?

hadoop - 具有聚合器功能的Hadoop组合器

c# - 对象初始化期间接口(interface)集合成员的奇怪行为

c++ - 什么时候可以在初始化列表中省略外括号?

sql - postgres 中用于计算值的列别名

methods - 将 Lua 方法定义为初始化

C++11 和广义初始化器约定

c++ - 适用于 mac 的免费 c++ 编译器不使用 xcode

c++ - 为什么在进行 int/unsigned int 除法时使用 'divl'

c++ - const char* 与 char* (C++)