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

时间:2017-07-26 19:45:05

标签: c++ syntax symengine

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

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

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

我知道单花括号用作初始化列表,但括号内的双花括号的含义对我来说没什么意义。

我在双花括号上找到的主要内容是this post,但它似乎不适用于此。

另外,我为链接这样的源代码道歉,但由于我缺乏理解,我不确定如何制作一个较小的例子。

谢谢!

1 个答案:

答案 0 :(得分:3)

可以使用大括号来描述

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

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

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