为什么"auto&"不能绑定到易失性右值表达式?
Why can't `auto&` bind to a volatile rvalue expression?
考虑以下代码:
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&
将不绑定到临时的。
相关文章:
- 易失性sig_atomic_t的内存安全性
- C++易失性:保证 32 位访问?
- 避免易失性和非易失性成员函数的代码重复
- 当 2 个线程共享同一物理内核时,具有错误共享的易失性增量在发布中的运行速度比在调试中慢
- 如何访问常量易失性 std::array?
- 为什么在 C++20 中弃用易失性?
- 根据 MSVC,具有易失性成员的结构不再是 POD
- 是否允许编译器优化掉局部易失性变量
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 如何避免对无锁程序使用易失性?
- C++:易失性实例中的易失性成员函数 - 将数组分配给指针是无效的转换?
- g++ 6.3,avx 内联函数上的 Kahan 求和用易失性关键字进行序列化
- 是什么让这种易失性打破了结构的指针算法?
- 如果不需要易失性,为什么 std::atomic 方法会提供易失性重载
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 使用易失性 c 字符串和 std::cout
- 易失性结构 = 结构不可能,为什么?
- 如何强制 GCC 以线性方式转换易失性内联程序集语句
- 类型为"const CompareVPtrs"的表达式将丢失一些常量易失性限定符以调用
- 为什么"auto&"不能绑定到易失性右值表达式?