为什么我的指针的 static

互联网 更新时间:2023-04-26 21:06:06

eer*_*ika 6

long *plDog = static_cast<long*>(piDog); // invalid type conversion

为什么我的指针的 static_cast 失败?

因为它的格式不正确。static_cast 的任何规则都不适用于您正在尝试的演员表。正如您在评论中提到的,这是一个无效的转换。

指向一种对象类型的指针不能静态转换为指向另一种对象类型的指针,除非它们是指向相关类的指针,或者在转换为/从指针转换为 void 时。

这个参考表明它应该没问题:https : //en.cppreference./w/cpp/language/static_cast

该参考资料表明您尝试的转换不正确

long* plDog = (long*)(piDog); // this is OK too... very weird!!

这是一个格式良好的转换。这并不“奇怪”。

显式转换(也称为“强制转换表示法”或“C 样式转换”)允许许多转换,而静态强制转换则不允许。这是因为静态强制转换具有(至少在表面上)类型安全,而显式转换本质上要求编译器假装类型系统不存在。

请注意,间接通过plDog和访问对象将导致未定义的行为。如您所见,出现错误是一件好事。

我们不允许在我们的编码标准中使用这个

这是一个很好的限制。这将使您的团队通过错误地绕过类型系统来编写错误。

Visual Studio C++ 的问题?

不,问题是程序格式不正确。编译器可以正确地通知您有关该错误的信息,并且不需要编译程序。


我建议问问自己:你为什么想要,或者认为你需要做这样的演员?

更多推荐

指针,static

本文发布于:2023-04-26 21:06:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/4ac4b31f79e9a652c896d477d447f524.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:指针   static

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 89744文章数
  • 23114阅读数
  • 0评论数