2016-11-04 105 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资格,可以用类型自然流动的语义来实现。
相关问题