为什么“auto&”不能绑定到一个易变的rvalue表达式?

时间:2015-10-11 14:50:17

标签: c++ c++11 auto volatile rvalue-reference

考虑以下代码:

int main()
{
  int i{};
  auto& c = static_cast<const int&&>(i);    // (1)
  auto& v = static_cast<volatile int&&>(i); // (2)
}

成功编译(1)时,不接受(2)

  

错误:volatile lvalue引用类型&#39; volatile int&#39;无法绑定到类型&{39; volatile int&#39;

的临时类型

为什么auto成为volatile int

为什么auto&可以成为const int并绑定到const int&&?是因为auto&实际上绑定到在赋值右侧创建的临时对象吗?但是,为什么auto& p = 1;不起作用?

1 个答案:

答案 0 :(得分:7)

这不是关于auto,而是关于将临时工具绑定到非const引用。

在第一种情况下,你得到一个const int&,这没关系。我是第二种情况,volatile int&不会绑定到临时。