有什么理由使用运行时断言而不是编译时断言?

2024-03-18

在审查 Visual C++ 代码库时,我发现了以下奇怪的事情。运行时断言(即检查条件,如果违反条件则抛出异常) 用于可以在编译时评估条件的情况:

assert( sizeof( SomeType ) == sizeof( SomeOtherType ) );

显然,编译器将评估条件并替换有效的代码

assert( true );

不执行任何操作或

assert( false );

每次控制通过该行时都会引发异常。

IMO 应该使用编译时断言,原因如下:

  • 它会在编译时更早地暴露条件违规,并且
  • 它将让机器代码变得更干净(因此更快、更小)

看起来编译时断言是唯一正确的事情。这里是否有任何可能的理由更喜欢运行时断言?


这里没有理由更喜欢运行时断言。您应该更喜欢编译时错误而不是运行时错误,因此,考虑到两者之间的选项,永远没有理由选择运行时断言。

但是,如果静态断言不是一种选择(不知道静态断言的概念,不知道如何制作静态断言并且没有可用的静态断言,或者知道如何制作静态断言但没有)的时间),运行时断言是下一个最好的事情。

对于 C++0x,内置static_assert该功能应该结束在编译时断言可以工作的情况下使用运行时断言的所有理由。

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

有什么理由使用运行时断言而不是编译时断言? 的相关文章

  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 从发布的文件中删除 PDB 引用

    在使用任何 IDE 调试和创建文件后 我总是会查看最终的二进制可执行文件或 DLL 现在我正在尝试 Visual C 2010 寻找最佳版本 没有垃圾或不必要的引用 因此 我创建了一个包含两个项目的新解决方案 一个可执行文件及其 DLL V
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

    我一次又一次发现自己必须编写 BindingList 和 ObservableCollection 的线程安全版本 因为当绑定到 UI 时 这些控件无法从多个线程更改 我想理解的是why情况就是这样 这是设计错误还是故意的 问题是设计一个线
  • 在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

    我正在将之前在 NET Framework 中编写的一些代码移植到 NET Core 我有这样的事情 HttpResponseMessage result await client SendAync request if result St
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • ASP.NET MVC 动作过滤器

    有谁知道即使在 CATCH 块中 ActionFilterAttribute 类的 OnResultExecuted 方法是否也会执行 ie CookiesActions public ActionResult Login Usuarios
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 使用 dateTimePicker 在 DataGridView 中编辑日期

    我有一个DateTime我的 WinForms 中的专栏DataGridView 目前只能通过手动输入日期来编辑该字段 例如 2010 09 02 需要什么才能拥有一个DateTimePicker 或同等 用作编辑器 DataGridVie
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac

随机推荐

  • PIP:“无法卸载‘ipython’。它是一个已安装的 distutils 项目,因此我们无法准确确定......”[重复]

    这个问题在这里已经有答案了 正在尝试安装spyder https pypi org project spyder using pip pip install spyder 弹出这个错误 无法卸载 ipython 这是一个已安装的 distu
  • 标尺应用程序如何在所有设备上保持准确?

    我真的很困惑目前市场上的 iOS Ruler 应用程序如何与不同尺寸的设备兼容 底部显示了一个示例 经过研究 我得出的结论是 实时获取当前屏幕的 PPI 是不可能的 这使得无法以编程方式绘制尺子 我的疑问是这些标尺应用程序如何在无法获取设备
  • 关于在视频中查找学生

    我现在正在从事一个眼球追踪项目 在这个项目中 我在网络摄像头视频中跟踪眼睛 分辨率为 640X480 我可以在每一帧中定位和跟踪眼睛 但我需要定位瞳孔 我读了很多论文 大部分都是参考Alan Yuille的可变形模板方法来提取和跟踪眼睛特征
  • Spring + Oauth2:如何刷新访问令牌

    我正在使用 Spring Boot 构建 REST Web 服务 身份验证是使用 Spring Security 和 OAuth2 实现的 用户根据 LDAP 服务器进行身份验证 这是我的网络安全配置 Configuration Enabl
  • C# 开发最简单的免费设置

    我在上网本上使用 Windows XP SP3 我需要编译 C 程序以供学习 我没有快速的电脑或快速的互联网连接或快钱 有人可以建议让我继续前进的最佳方法吗 谢谢你们 http www microsoft com express Downl
  • 在 Android 3.1 上调整 TextView 大小不会缩小其高度

    我有一个TextView可以动态调整大小 我使用setTextSize 它在 Android 2 2 上正确扩展和收缩其边界 但在Android 3 1上 当文本变小时 区域的高度不会缩小 这证明了这一点 布局只是简单的垂直LinearLa
  • 背景和 CSS 浮动

    所以我使用 960 网格系统 发现了一些他们不支持的东西 我考虑过切换到蓝图 但我必须在此过程中稍后再回到设计 不管怎样 我简化了我的代码来展示我所经历的
  • 对数据库中的项目符号进行排序

    我有一个专栏 datatype varchar 50 在数据库 SQL Server 2008 中 其值如下所示 1 2 1 1 11 4 1 5 2 1 1 1 4 1 2 1 4 2 2 4 3 4 2 4 3 1 4 2 1 11 2
  • HTML 标题对齐问题

    你好 我有 2 个简单的标题 一个 h3 位于一个 h2 之上 由于某些奇怪的原因 h2 标题的左侧似乎有一个 1px 的间隙 这让我发疯 我只是不明白为什么会这样 h2 的字体大小为 40px 而 h3 的字体大小为 12px 有人能帮我
  • 使用 EPPlus 返回 INT 的 Excel 日期列

    所以我使用 EPPlus 来读取和写入 Excel 文档 Workflow 用户生成填充的 Excel 文档 打开文档并添加一行 已上传并已阅读 当我读回值时 使用 EPPlus 创建文档时生成的日期显示正确 但用户更改日期或添加的行显示为
  • 如何在样式文件中定义可绘制对象的大小?

    我想指定一次资源 值 styles xml两个复选框的大小及其四个形状可绘制对象 res drawable cb1 checked xml res drawable cb1 unchecked xml res drawable cb2 ch
  • 是什么原因导致“无可辩驳的模式失败了”,这是什么意思?

    什么是 无可辩驳的模式失败了 意思是 什么情况会导致这个运行时错误 考虑这个例子 foo Just x hello main putStrLn foo Nothing 这使用了一种无可辩驳的模式 部分 无可辩驳的模式总是 匹配 所以这个打印
  • Android TTS 音量控制

    向 TTS 引擎发送请求时 有什么方法可以控制 TTS 引擎的音量吗 我可以在这里使用 AudioManager 吗 谢谢 您可以在 TTS talk 方法中获取此信息 但只能从 API 级别 11 开始 为了保持向后兼容性 您可以定位更高
  • Java 通用列表>

    为什么在java中我们不能这样做 List
  • 使用 PHP 连接到 CMU Sphinx

    我一直在研究语音识别以及将其实施到网站中的方法 我发现了许多将其与 Python 一起使用的示例 甚至还有一个与 Node js 一起使用的示例 但我希望能够将 PHP 与此一起使用 有什么方法可以使用 PHP 访问 Linux 服务器上的
  • 如何在 Google Workspace 插件中国际化 universalActions 标签

    我设置了一个 Gmail 插件universalActions菜单 标签应由以下方式定义Session getActiveUserLocale 以任何方式 由于清单文件中不允许使用变量 appscript json 我不知道该怎么做 我正在
  • 无法在 VS 2017 15.5.7 中添加服务引用

    我有一个 VB NET Core 应用程序 我正在尝试连接到远程 WCF 服务 当我尝试通过 添加连接服务 常规情况下 未列出任何服务 并显示一条消息 当前项目类型不支持任何连接服务 我尝试安装 WCF Web 服务参考提供程序扩展 IIU
  • 如何在android中通过特定应用程序分别查找wifi和网络数据使用情况?

    recived TrafficStats getUidRxBytes uid send TrafficStats getUidTxBytes uid TrafficStats getMobileRxBytes TrafficStats ge
  • Leaflet maxBounds - 边界不起作用

    我尝试了 Leafletjs maxBounds我在 Mapbox 找到的示例代码 https www mapbox com mapbox js example v1 0 0 maxbounds 下面你可以找到我的完整代码 也在jsfidd
  • 有什么理由使用运行时断言而不是编译时断言?

    在审查 Visual C 代码库时 我发现了以下奇怪的事情 运行时断言 即检查条件 如果违反条件则抛出异常 用于可以在编译时评估条件的情况 assert sizeof SomeType sizeof SomeOtherType 显然 编译器