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

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

根据标准,哪一个是正确的?

最佳答案

reinterpret_cast表达式要执行的转换不在reinterpret_cast可以执行[expr.reinterpret.cast]的转换[expr.reinterpret.cast]/1列表中。 0x7F800000是整数类型的文字。只能将reinterpret_cast从整数类型的值转换为其他类型的转换,是将此类值转换为指针类型[expr.reinterpret.cast]/5的转换。 float&&是引用类型,而不是指针类型。唯一可以将reinterpret_cast转换为引用类型的转换是转换glvalue表达式[expr.reinterpret.cast]/11的转换。 0x7F800000不是glvalue。因此,该代码格式错误。 GCC接受这一事实令我非常惊讶,我想肯定是一个应该报告的错误……

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

10-11 22:54
查看更多