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

Why can't `auto&` bind to a volatile rvalue expression?

本文关键字:易失性 表达式 绑定 auto 不能 为什么      更新时间:2023-10-16

考虑以下代码:

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&将不绑定到临时的。