【发布时间】:2017-07-18 21:48:05
【问题描述】:
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*& 类型的非常量 左值引用 绑定到 rvalue 类型为 int*
谁能解释一下这是怎么回事?
【问题讨论】:
-
这是因为您尝试使用 nullptr 初始化引用,而不是分配给它。不要让
=迷惑你。 -
我在这里没有看到任何
int*分配,但是int*&这听起来像是错误的。 -
当然不能分配给
int*。否则这样的事情实际上会编译int a = 1; &a = nullptr;
标签: c++ templates typetraits nullptr