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

ged*_*ial 5 c++ templates type-traits nullptr

cout << std::is_assignable<int*, std::nullptr_t>::value << endl;
cout << std::is_assignable<int*&, std::nullptr_t>::value << endl;
Run Code Online (Sandbox Code Playgroud)

输出为:0 1

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

我可以将nullptr分配给对指针引用,但是我不能将它分配给原始指针

这是相反的!

int* p = nullptr;
int*& pref = nullptr;
Run Code Online (Sandbox Code Playgroud)

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

错误:不能非const结合左值参考类型的INT*右值类型的INT*

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

Ric*_*ges 2

cppreference 上的文档涵盖了这一点。

std::is_assignable<int, int>是假的,但却std::is_assignable<int&, int>是真的。

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