【问题标题】:Null pointer constant conversion to a prvalue空指针常量转换为纯右值
【发布时间】:2014-07-31 14:02:58
【问题描述】:

由以下规则描述的空指针常量转换。 4.10/1 N3797:

整数类型的空指针常量可以转换为纯右值 std::nullptr_t 类型。 [注意:生成的纯右值不为空 指针值。 ——尾注]

我认为以下是此类转换的示例:

static_cast<std::nullptr_t>(0);

但这似乎不是真的,因为

#include <iostream>
#include <iostream>
using namespace std;

int main()
{
    void *p = static_cast<std::nullptr_t>(0);
    cout << p; //0- Why? It is not a null pointer value
}

demo

【问题讨论】:

  • 我很困惑(真的)——当你发送一个指向 std::cout 的指针时会发生什么?
  • @doctorlove, 打印指针包含的地址。

标签: c++ null


【解决方案1】:

表达式p 一个空指针。 std::nullptr_t 类型的纯右值可以转换为任何指针。它是初始化表达式static_cast&lt;std::nullptr_t&gt;(0),它不是空指针值。

【讨论】:

  • 即prvalue的值不是空指针值,而是可以转换为他。你能解释一下static_cast&lt;std::nullptr_t&gt;(0) 的价值是什么吗?我认为是nullptr
  • @DmitryFucintv:等于nullptr。它是std::nullptr_t 类型的纯右值,并且是唯一的此类值。
猜你喜欢
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多