对于内置类型可以使用 C 风格的强制转换吗?

2024-01-09

在这里阅读了很多关于 C++ 中 C 风格转换的答案后,我仍然有一个小问题。我可以对内置类型使用 C 风格的转换吗?long x=(long)y;或者它仍然被认为是不好和危险的?


我可以对 long x=(long)y; 等内置类型使用 C 风格转换吗?或者它仍然被认为是不好和危险的?

永远不要使用它们。反对使用它们的原因也适用于此。基本上,一旦你使用它们,所有的赌注都会消失,因为编译器将不再帮助你。虽然这对于指针来说比其他类型更危险,但它可能是still危险并且在出现错误时给出的编译器诊断很差,而新样式的强制转换提供了更丰富的错误消息,因为它们的使用受到更多限制:Meyers 引用了强制转换的示例constness:使用除const_cast不会编译,从而明确what发生在这里。

此外,无论类型如何,都存在一些其他缺点,即语法考虑:C 风格的强制转换非常不引人注目。这不好:C++ 强制转换在代码中明显突出,并指向潜在危险的代码。还可以在 IDE 和文本编辑器中轻松搜索它们。尝试在大型代码中搜索 C 风格的强制转换,您就会发现这有多么困难。

另一方面,与 C++ 类型转换相比,C 风格类型转换没有任何优势,因此甚至无需考虑权衡。

更一般地说,Scott Meyers 建议在《Effective C++》(第 27 项)中“最小化强制转换”,因为“强制转换会颠覆类型系统”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于内置类型可以使用 C 风格的强制转换吗? 的相关文章

随机推荐

  • 仅将圆角半径设置为 UIView/UIButton 的特定一侧

    我想为我的 UI 元素设置圆角半径 如附加的快照所示 我尝试使用设置角半径UIBezierPath但它没有给出预期的结果 我还添加了这三个UIButtons in UIView并将角半径设置为容器视图但没有用 参考https stackov
  • 垂直对齐另一个div内的div而不使用flex

    如何使用属性在另一个div内垂直对齐divvertical align middle 这是我的代码 hello height 100px width 100px background color black vertical align m
  • 如何在 ActionScript 中将字符串转换为布尔值?

    我有以下代码 var bool String true Withoutif 块或 switch 语句 如何将其转换为布尔对象 您可以使用 var boolString String true var boolValue Boolean bo
  • 什么是 HTML5 ARIA?

    什么是 HTML5 ARIA 我不明白如何实施它 WAI ARIA http www w3 org TR wai aria 是定义对可访问 Web 应用程序的支持的规范 它定义了一堆标记扩展 主要是 HTML5 元素上的属性 Web 应用程
  • 带有中缀函数的偏应用

    虽然我对数学意义上的柯里化有一些了解 但部分 应用中缀函数是我潜水后发现的一个新概念 进书里为大善而学 Haskell http learnyouahaskell com 给定这个函数 applyTwice a gt a gt a gt a
  • GPL/LGPL 和静态链接 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 无法调整 AWS EBS 根卷的大小或创建更大的交换分区 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个 Amazon Web Services EC2 Debian 8 0 实例 其弹性块存储 EBS 卷为 35GB fdisk 正
  • Symfony EntityRepository 返回“Proxies\__CG__ MyModelName”的实例

    Query em gt getRepository this gt getRepositoryName AppBundle User gt find id 返回对象实例Proxies CG AppBundle Entity User代替Ap
  • 如何从 C++ 获取 Windows 上驱动程序的版本

    我正在寻找一种编程方式来获取驱动程序的版本号 我想要设备管理器在设备的驱动程序属性中显示的相同数字 背景 我有一个与一些自定义硬件对话的应用程序 自定义硬件的设备驱动程序在特定版本号之前已存在已知错误 我希望应用程序检查驱动程序版本并警告用
  • 无法以编程方式从另一个模块获取资源

    我有一个带有几个 gradle 模块的 android 项目 模块之间的依赖关系如下所示 应用程序 coremodule中有资源 字符串和颜色 当我在功能模块的布局中使用它们时 一切正常 它们可用并且按预期工作 但是当我尝试从功能模块的 A
  • 如果值为空则更改绑定

    如果值为 null 或空 我想更改绑定 我举这个例子来解释 List
  • 删除SAS中所有观测值都不包含特定值的组

    我想删除其观察值中没有 NUM 14 的整个组 所以就像这样 原始数据 ID NUM 1 14 1 12 1 10 2 13 2 11 2 10 3 14 3 10 由于 ID 2 中都不包含 NUM 14 因此我删除了组 2 它应该看起来
  • 使用“/”和 Slugs 的 Rails RESTful 路由

    我希望做一些类似 wordpress slug 的事情 其中 我有一个像这样的 URL 同时维护 RESTful 路由 http foo com blog 2009 12 04 article title 我对保持 RESTFUL 路由感兴
  • 如何测试基于 Stripe 的 Apple Pay? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 目前我正在尝试开发一个本机iOS应用程序 我必须集成基于Stripe的Apple Pay 为此我已在我的项目中添加了他们提供的SDK 在最
  • 在Android上,正在运行的进程和缓存的后台进程有什么区别?

    在Android上 当我查看 设置 gt 应用程序 时 在 运行 选项卡下 我可以看到内存被分成几部分 已用内存 和 空闲内存 应用程序也被放置进入 已用内存 或 空闲内存 无内存 部分中的应用程序被标记为 缓存后台进程 那么 什么是 缓存
  • ReentrantLock.Sync 中当前线程变量的搭载如何工作?

    我在 Java并发实践 第14 6 1节中读到了ReentrantLock的一些实现细节 注释中的一些内容让我感到困惑 因为受保护的状态操作方法具有易失性读取或写入的内存语义 并且 ReentrantLock 非常小心仅在调用 getSta
  • 谷歌表格=间接()在单元格范围上

    我想知道是否有一个标准函数可以循环一系列单元格并对其应用间接函数 我正在尝试构建一个表格来按商店 月份和类别来支付我的费用 但到目前为止它还很难扩展 因为我有一个看起来像的函数 INDIRECT B 3 concat A12 C 1 IND
  • 什么可能导致 PHP 序列化函数失败?

    我有一些服务器端 PHP 代码 尝试将数据对象 本质上是多维数组 保存到后端数据库 该数据对象最初作为从 Flex 应用程序发送的 AMF 动作脚本对象出现 我想保留整个对象以供以后使用 因此我使用了 php 序列化函数并将对象编码为一个可
  • 如何使该 Youtube 视频可点击(css + z-index)?

    我希望 Youtube 视频成为背景壁纸 但我仍然希望它具有交互性 即用户可以通过单击来暂停视频 现在 我已将 iframe 设置为 z index 为 99 由于某种原因 我无法点击它 用Firebug检查后 似乎是这样body覆盖 if
  • 对于内置类型可以使用 C 风格的强制转换吗?

    在这里阅读了很多关于 C 中 C 风格转换的答案后 我仍然有一个小问题 我可以对内置类型使用 C 风格的转换吗 long x long y 或者它仍然被认为是不好和危险的 我可以对 long x long y 等内置类型使用 C 风格转换吗