【问题标题】:Double curly braces in C++ constructorC ++构造函数中的双花括号
【发布时间】:2017-07-26 19:45:05
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: c++ syntax symengine


    【解决方案1】:

    花括号可以用来描述

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

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

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

    【讨论】:

    • 感谢您快速回答我这个有点不重要的问题。内部花括号怎么会在symbol 之外呢?我熟悉的第二个子弹的用法类似于symbol s{"x"};
    • 啊,我浏览你的代码太快了。答案其实比较复杂,我马上编辑。
    • 对不起,我不确定我是否理解您答案后半部分的第三个项目符号。完成第三个项目符号{symbol_object} 的语法是什么?而且,既然刚刚构建了一个符号,为什么还要再次构建相同的符号?
    • 啊,您对前面项目符号的编辑澄清了第一个问题。
    • 这似乎是多余的,但我还没有尝试过它是否可以在没有内部大括号的情况下工作(或者没有 piranha::symbol(...))
    猜你喜欢
    • 1970-01-01
    • 2020-05-28
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多