【问题标题】:reinterpret_cast from rvalue to rvalue referencereinterpret_cast 从右值到右值引用
【发布时间】:2019-10-12 11:21:53
【问题描述】:

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

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

按照标准,哪一个是对的?

【问题讨论】:

  • 很确定无论如何都会是 UB,因为这里没有 float 别名。
  • 是的,它源自更“常见的”reinterpret_cast&lt;float&amp;&gt;(variable) 模式。

标签: c++ standards-compliance


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 2011-02-14
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多