考虑以下代码:
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;
不起作用?
答案 0 :(得分:7)
这不是关于auto
,而是关于将临时工具绑定到非const引用。
在第一种情况下,你得到一个const int&
,这没关系。我是第二种情况,volatile int&
不会绑定到临时。