考虑以下代码:

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

虽然 (1) 编译成功,但不接受 (2):



为什么 auto 不能成为 volatile int

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

最佳答案

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

在第一种情况下,您会得到一个 const int& ,这没问题。我是第二种情况,volatile int& 不会绑定(bind)到临时的。

关于c++ - 为什么 `auto&` 不能绑定(bind)到可变的右值表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33066346/

10-11 20:52
查看更多