8

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

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

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

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

我在双花括号上发现的主要内容是这篇文章,但它似乎不适用于这里。

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

谢谢!

4

1 回答 1

6

花括号可以用来描述

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

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

  • astd::string从返回detail::poly_print(var)
  • 该字符串用于构造一个piranha::symbol
  • 然后将这个临时值传递给 的移动构造函数(我猜这里)symbol,构造另一个symbol
    这似乎有点多余,但如果代码只使用一对大括号,我还没有尝试过
  • 然后piranha::symbol将其存储在std::initializer_list
  • 然后将其传递给piranha::symbol_set
于 2017-07-26T19:53:46.983 回答