c ++ - 为什么nullptr_t不能赋值给int *?

时间:2017-07-18 21:48:06

标签: c++ templates typetraits nullptr

cout << std::is_assignable<int*, std::nullptr_t>::value << endl;
cout << std::is_assignable<int*&, std::nullptr_t>::value << endl;

输出为: 0 1

我不明白为什么第一次检查会返回 false

我可以将 nullptr 分配给对指针的引用,但我无法将其分配给原始指针

反过来了!

int* p = nullptr;
int*& pref = nullptr;

第二个赋值正如预期的那样标记错误:

  

错误:无法将 int *&amp; 类型的非常量左值参考绑定到    int *

类型的右值

有人可以解释一下发生了什么吗?

1 个答案:

答案 0 :(得分:2)

关于cppreference的文档涵盖了这一点。

std::is_assignable<int, int>为false,但std::is_assignable<int&, int>为真。

http://en.cppreference.com/w/cpp/types/is_assignable