2017-07-26 215 views
2

以下C++代碼行中的雙花括號是什麼意思?C++構造函數中的雙曲花括號

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

對於上下文,這是從在SymEngine代碼("symengine/polys/uintpoly_piranha.h")的文件,它可以在下面的鏈接中找到,如可以在食人魚庫,其在上面的行中。

我知道一個大括號作爲初始化列表,但雙大括號的括號品牌內的含義對我來說毫無意義。

我在雙曲花括號上發現的主要事情是this post,但它似乎並不適用於此。

此外,我很抱歉連接這樣的源代碼,但由於缺乏理解我不確定如何製作一個較小的示例。

謝謝!

回答

2

大括號可以用來描述

  • 初始化值列表,這解釋了外括號(創建符號的std::initializer_list,見the corresponding constructor
  • 一種簡寫形式構造呼叫,這解釋了內 括號(創建使用移動構造函數的symbol實例,見the corresponding constructor
    如果參數的類型是事先知道,而不是symbol{parameters},你可以只寫{parameters}。這也適用於返回值和變量初始化。

那麼究竟發生在這條線是:

  • 一個std::stringdetail::poly_print(var)
  • 返回此字符串用來構造piranha::symbol
  • 此臨時值然後傳遞到移動構造函數(我猜在這裏)symbol,構造另一個symbol
    這似乎有點多餘,但我如果代碼工作只用一對大括號
  • piranha::symbol然後存儲在一個std::initializer_list
  • 的,然後傳遞到的piranha::symbol_set
+0

感謝的構造函數快速回答沒有嘗試過我有些非最小問題。儘管內部大括號在'符號'之外怎麼過?我熟悉你的第二個項目符號的用法就像'symbol s {「x」};'。 – Grayscale

+0

啊,我太快地瀏覽了你的代碼。答案其實更加複雜,我會馬上編輯它。 –

+0

我編輯我的答案是更具體的 –