C++构造函数中的双花括号

Double curly braces in C++ constructor

下面这行 C++ 代码中的双花括号是什么意思?

piranha::symbol_set ss({{piranha::symbol(detail::poly_print(var))}});

对于上下文,这是来自 SymEngine 代码 ("symengine/polys/uintpoly_piranha.h") 中的一个文件,可以在下面的 link 中找到,上面一行中使用的 Piranha 库也是如此.

我知道单花括号用作初始化列表,但括号集中的双花括号的含义对我来说意义不大。

我在双花括号上发现的主要内容是this post,但在这里似乎不适用。

此外,对于 link 像这样输入源代码,我深表歉意,但由于我缺乏理解,我不确定如何制作一个更小的示例。

谢谢!

可以用大括号来描述

  • 一个初始化列表,它解释了外括号(创建一个 std::initializer_list 符号,参见 the corresponding constructor
  • 一个shorthand构造函数调用的符号,它解释了内部 大括号(使用移动构造函数创建 symbol 的实例,参见 the corresponding constructor
    如果事先知道参数的类型,则可以只写 {parameters} 而不是 symbol{parameters}。这也适用于 return 值和变量初始化。

所以这一行实际发生的是:

  • a std::string 是 return 编辑自 detail::poly_print(var)
  • 这个字符串用来构造一个piranha::symbol
  • 然后将此临时值传递给 symbol 的移动构造函数(我在这里猜测),构造另一个 symbol
    这似乎有点多余,但如果代码仅使用一对大括号,我还没有尝试过
  • 这个 piranha::symbol 然后存储在 std::initializer_list
  • 然后传递给 piranha::symbol_set
  • 的构造函数