如何解决GCC 在做 static_cast 到 void 指针引用时将引用转换为临时引用
GCC 在编译以下代码时产生警告:
void* const & cast(int* const &ptr)
{
return static_cast<void* const &>(ptr);
}
警告是“返回对临时的引用” (coliru)。
哪个编译器是对的?为什么引用转换为临时引用?
另请注意,将 static_cast
更改为 reinterpret_cast
可修复警告 (coliru)。
解决方法
Clang 12 here 给了我一个类似的警告。您链接的那个可能已经过时了。
代码被破坏,你返回一个悬空引用。
与 reinterpret_cast
不同,static_cast
将拒绝重新解释引用。相反,它将从原始指针构造一个 void *
1 类型的临时对象,并形成对它的引用(这是允许的,因为引用是 const
)。>
请注意,改为执行 reinterpret_cast
,然后读取/写入结果引用,会违反严格的别名并导致未定义的行为。
1我认为是void *
而不是void *const
,因为[expr.type]/2
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。