考虑以下代码:
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&
将不绑定到临时的。