【问题标题】:prvalue of type std::nullptr_tstd::nullptr_t 类型的纯右值
【发布时间】:2014-07-31 13:39:34
【问题描述】:

第 4.10/1 节 N3797 说:

空指针常量是一个值为零的整数文字 (2.14.2) 或 std::nullptr_t 类型的纯右值。

我认为nullptrprvalue 类型的std::nullptr_t。你能得到更多这样的prvalue的例子吗?

【问题讨论】:

    标签: c++ rvalue


    【解决方案1】:

    与任何类型一样,有多种方法可以获得std::nullptr_t 类型的纯右值:

    • 从适当的表达式转换:static_cast<std::nullptr_t>(0)
    • 临时构造函数调用:std::nullptr_t{}
    • 调用返回std::nullptr_t的函数:std::nullptr_t f() { return {}; } f()
    • 调用返回std::nullptr_t的lambda:[]() -> std::nullptr_t { return {}; }()
    • 一个逗号表达式,其中右侧是std::nullptr_t prvalue:("hello", nullptr)
    • 一个条件表达式,其中一侧的类型为std::nullptr_t,而另一侧的值类别不同,或者是一个抛出表达式:false ? throw "oops" : nullptr, false ? std::move(nullptr) : nullptr

    因为std::nullptr_t 不参与大多数运营商,所以这是一个相当详尽的列表;大多数其他类型为 std::nullptr_t 的表达式将产生泛泛值。

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 2015-07-03
      • 2014-08-18
      • 1970-01-01
      • 2014-08-26
      • 2021-11-02
      • 2012-04-14
      • 2018-04-26
      • 2012-08-02
      相关资源
      最近更新 更多