c++ - 从右值到右值引用的 reinterpret_cast

标签 c++ standards-compliance

只是一个简单的编译测试。 gcc 接受以下内容,而 clang 和 msvc 拒绝它:https://godbolt.org/z/DlUasL

float test()
{
    return reinterpret_cast<float&&>(0x7F800000);
}

按照标准,哪个是正确的?

最佳答案

reinterpret_cast 表达式寻求执行的转换不在转换列表中[expr.reinterpret.cast] reinterpret_cast 可以执行 [expr.reinterpret.cast]/1 . 0x7F800000 是整数类型的文字。 reinterpret_cast 可以执行的将整数类型的值 转换为某种其他类型的唯一转换是将这样的值转换为指针类型 [expr.reinterpret.cast]/5 . float&& 是引用类型,不是指针类型。 reinterpret_cast 可以执行的将 转换为 引用类型的唯一转换是转换泛左值表达式 [expr.reinterpret.cast]/11。 . 0x7F800000 不是左值。因此,此代码格式错误。 GCC 会接受这个事实让我感到非常惊讶,而且我会说,这绝对是一个应该报告的错误......

关于c++ - 从右值到右值引用的 reinterpret_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56316648/

相关文章:

objective-c - 在 Objective-C 中,我是否可以重写父类用来遵守协议(protocol)的子类中的方法?

c++ - 运行 Gtkmm 对话框失败

c++ - 使用 CLI 传输指针值时出错

c++ - 以类似方式处理 std::map<K,V> 和 std::map<K,V*>

mysql - 在 MySQL 中使用正确的或可取的不等于运算符

c++ - Visual C++ 不一致代码的示例?

c++ - std::ifstream::read 或 std::ofstream::write 参数为零?

c++ - GetCPUDescriptorHandleForHeapStart 堆栈损坏

c++ - 不使用 sqrt 函数求平方根?

google-cloud-platform - GCP 暂停阻止访问我们的数据