【问题标题】:Can variant<int, string> be constexpr?variant<int, string> 可以是 constexpr 吗?
【发布时间】:2017-03-12 10:08:02
【问题描述】:

来自cppreference documentation for variant::variant()

当且仅当替代类型 T_0 的值初始化满足 constexpr 函数的要求时,此构造函数才是 constexpr。

上面没有提到变体中的其他类型,所以如果变体必须有一个重要的析构函数,那么声明 constexpr variant&lt;int, string&gt; v; 是否应该有效?

【问题讨论】:

    标签: c++ c++17 variant


    【解决方案1】:

    您的引用并不意味着声明 constexpr variant&lt;int, string&gt; v; 有效。引用 N4140(大致是 C++14 而不是 C++1z,但概念没有改变):

    7.1.5 constexpr 说明符 [dcl.constexpr]

    9 对象声明中使用的constexpr 说明符将对象声明为const。这样的对象应具有文字类型并应被初始化。如果它由构造函数调用初始化,则该调用应为常量表达式(5.19)。 [...]

    仅仅因为构造函数调用是常量表达式而声明无效,类型也需要是文字类型。文字类型的要求之一是它们具有微不足道的析构函数。

    【讨论】:

      猜你喜欢
      • 2020-03-16
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多