【问题标题】:c++ - Why is nullptr_t not assignable to int*? [duplicate]c++ - 为什么 nullptr_t 不能分配给 int*? [复制]
【发布时间】: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*&amp; 这听起来像是错误的。
  • 当然不能分配给int*。否则这样的事情实际上会编译int a = 1; &amp;a = nullptr;

标签: c++ templates typetraits nullptr


【解决方案1】:

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

std::is_assignable&lt;int, int&gt; 为假,但std::is_assignable&lt;int&amp;, int&gt; 为真。

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

【讨论】:

猜你喜欢
  • 2014-06-02
  • 2017-03-28
  • 1970-01-01
  • 2021-03-23
  • 2019-10-26
  • 1970-01-01
  • 2010-09-24
  • 2017-07-31
  • 1970-01-01
相关资源
最近更新 更多