为什么"auto&"不能绑定到易失性右值表达式?



考虑以下代码:

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

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

错误:volatile左值对volatile int类型的引用不能绑定到volatile int类型的临时变量

为什么auto不能变成volatile int ?

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

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

在第一种情况下,您得到const int&,这是可以的。在第二种情况下,volatile int&将不绑定到临时的。

最新更新