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 库也是如此.
- SymEngine 源代码:https://github.com/symengine/symengine
- 食人鱼源代码:https://github.com/bluescarni/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
的构造函数
下面这行 C++ 代码中的双花括号是什么意思?
piranha::symbol_set ss({{piranha::symbol(detail::poly_print(var))}});
对于上下文,这是来自 SymEngine 代码 ("symengine/polys/uintpoly_piranha.h"
) 中的一个文件,可以在下面的 link 中找到,上面一行中使用的 Piranha 库也是如此.
- SymEngine 源代码:https://github.com/symengine/symengine
- 食人鱼源代码:https://github.com/bluescarni/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
的构造函数