2016-11-04 72 views
2

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.html中有一條關於需要擴展std::variant<int, const int>並投票允許它的提示,但是我找不到實際的理由。爲什麼在C++ 17中的std :: variant允許std :: variant <int,const int>

那麼,爲什麼有意義允許std::variant<int, const int>

+2

你爲什麼不讀這個鏈接?它很好地解釋了原理。它實際上在介紹的第一行中解釋了它。 –

+2

對不起@EliSadoff,介紹的第一行說「C++ 17需要一個類型安全的聯合:」,你能擴展嗎? –

+0

C++目前沒有類型安全聯合,並且允許'int' const int'聯合允許存在類型安全聯合。這將有助於減少不安全的類型異常。提案中包含的代碼是爲什麼需要這個例子。 –

回答

1

本文早期版本中存在的基本原理和討論部分已分爲P0086 - Variant design review

有關段落說:

variant<int, const int>一個variant可以處理const類型:他們 只能通過variant建設和emplace()進行設置。如果 const和非const類型都是替代方法,那麼通過正則構造函數實例化/重載 規則選擇活動的 規則,就像任何其他可能匹配的備選類型一樣。

因此,在原理方面,通過部分替代品看,我們可以說:

  • 替代類型的要求越少,就越容易它是在模板代碼使用variant。 (否則,模板代碼將不得不通過類型列表,去除cv限定符,消除重複等等,然後用它們實例化variant。)
  • 允許使用cv限定類型,並且與特別是不同的cv資格,可以用類型自然流動的語義來實現。
相關問題