为什么C++17中的std::variant允许使用std::variant<int, const int>?

3

2
你为什么不读一下那个链接呢?它解释得非常清楚。实际上,它在介绍的第一行就解释了。 - Eli Sadoff
2
抱歉 @EliSadoff,介绍的第一行说“C++17需要一个类型安全的联合:”,你能详细解释一下吗? - Mircea Baja
@BaummitAugen 我个人认为这可能会有所帮助,但是效果参差不齐。我只是在说明为什么有人想要它。 - Eli Sadoff
2
@BaummitAugen:“鉴于他们对此进行了投票,并得到了1票中立、1票弱反对甚至1票强烈反对,似乎并不清楚变体是否应该支持这一点。”但仍有超过半数的人支持它。这表明标准委员会达成了共识。 - Nicol Bolas
1
一些章节已从文档的后续版本中删除。您可以在N4450中找到一份早期版本,其中包含一些详细信息。 - bogdan
显示剩余4条评论
1个回答

1

早期版本的论文中存在的理论和讨论部分已经被分成 P0086 - 变体设计审查

相关段落如下:

variant<int, const int> A variant可以处理const类型:它们只能通过variant构造和emplace()进行设置。如果同时存在const和非const类型,则通过常规构造函数实例化/重载规则选择活动的替代方案,就像选择任何其他可能匹配的替代方案类型一样。

因此,在替代方案部分查看理由,我们可以说:

  • 要是对于备选类型的要求越少,那么在模板代码中使用 variant 就会更加容易。(否则,模板代码就必须经过一系列操作,比如遍历类型列表、删除 cv 限定符、去重等等才能实例化一个带有这些类型的 variant。)
  • 允许使用带有 cv 限定符的类型,并且特别允许使用带有不同 cv 限定符的相同类型,可以通过自然流动的语义来实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接