C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 取消引用void指针时的reinterpret_cast行为大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在与 this answer评论帖子中提出的建议争论时,我遇到了一些代码,gcc4.8和VS2013拒绝编译,但是clang愉快地接受它并显示正确的结果.

#include <iostream>

int main()
{
    int i{ 5 };
    void* v = &i;
    std::cout << reinterpret_cast<int&>(*v) << std::endl;
}

Live demo.GCC和VC都因我预期的错误而失败,抱怨代码试图在reinterpret_cast中取消引用void *.所以我决定在标准中查看这个.来自N3797,§5.2.10/ 11 [exPR.reinterpret.cast]

在这种情况下,T1为void,T2为int,并且可以使用reinterpret_cast将void *转换为int *.因此满足所有要求.

根据说明,reinterpret_cast< int&>(* v)与* reinterpret_cast< int *>(&(* v))具有相同的效果,根据我的推算,它与* reinterpret_cast< int相同* GT;(v)中. 那么这是一个海湾合作委员会和VC的错误,还是铿锵有力,我错误地解释了这个?

解决方法

void类型的表达式在return语句中只允许作为语法设备,并且你也可以将表达式转换为void,但这就是全部:没有类型为void的glvalues,void类型的表达式不引用内存.因此,从glvalue开始的标准引用的段落不适用.因此,铿锵是错的.

大佬总结

以上是大佬教程为你收集整理的c – 取消引用void指针时的reinterpret_cast行为全部内容,希望文章能够帮你解决c – 取消引用void指针时的reinterpret_cast行为所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。