C++03 `throw()` 说明符和 C++11 `noexcept` 之间有什么区别?

2023-11-26

有什么区别吗throw() and noexcept除了分别在运行时和编译时检查之外?

这篇维基百科 C++11 文章建议弃用 C++03 throw 说明符。
为什么会这样...是noexcept有足够的能力在编译时涵盖所有这些吗?


注:我检查过这个问题 and 本文,但无法确定其弃用的确切原因。


异常说明符已被弃用,因为异常说明符通常是一个糟糕的主意. noexcept被添加是因为它是异常说明符的一种相当有用的用途:知道函数何时won't抛出异常。因此,它变成了一个二元选择:会抛出异常的函数和不会抛出异常的函数。

noexcept添加了而不是仅仅删除除throw()因为noexcept更强大。noexcept可以有一个编译时解析为布尔值的参数。如果布尔值为 true,则noexcept棍子。如果布尔值为假,则noexcept不粘,函数可能会抛出异常。

因此,你可以这样做:

struct<typename T>
{
  void CreateOtherClass() { T t{}; }
};

Does CreateOtherClass抛出异常?可能,如果T的默认构造函数就可以。我们怎么知道?像这样:

struct<typename T>
{
  void CreateOtherClass() noexcept(is_nothrow_default_constructible<T>::value) { T t{}; }
};

Thus, CreateOtherClass()当且仅当给定类型的默认构造函数抛出异常时才会抛出异常。这解决了异常说明符的主要问题之一:它们无法向上传播调用堆栈。

你不能这样做throw().

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

C++03 `throw()` 说明符和 C++11 `noexcept` 之间有什么区别? 的相关文章

  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 当其源是 https uri 时如何使 wpf MediaElement 播放

    在 wpf 独立应用程序 exe 中 我在主窗口中包含了 MediaElement
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • C# Winforms Designer 无法打开,因为它无法在同一程序集中找到类型

    我收到以下错误 找不到类型 My Special UserControl 请确保引用包含此类型的程序集 如果此类型是您的开发项目的一部分 请确保已使用当前平台或任何 CPU 的设置成功构建该项目 但没有任何意义的是My Special Us
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

    Visual Studio 2010 会删除 没有其他词 不安全块中函数参数之一中的数据 什么可能导致此错误 调试器显示以下消息 Cannot obtain value of local or argument as it is not a
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • Emacs C++,打开相应的头文件

    我是 emacs 新手 我想知道 是否有在头文件 源文件和相应的源文件 头文件之间切换的快捷方式 是否有像通用 emacs 参考卡那样的参考卡 Thanks There s ff find other file 您可以使用以下方法将其绑定到
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类
  • 是否可以使用 Dapper 流式传输大型 SQL Server 数据库结果集?

    我需要从数据库返回大约 500K 行 请不要问为什么 然后 我需要将这些结果保存为 XML 更紧急 并将该文件通过 ftp 传输到某个神奇的地方 我还需要转换结果集中的每一行 现在 这就是我正在做的事情 TOP 100结果 使用 Dappe

随机推荐

  • JMeter - 使用 POST 变量发送 HTTP 请求时遇到问题?

    我正在尝试加载测试一个从存档数据库中获取记录的 java servlet Servlet 的工作原理如下 1 从 HTTP 标头读取 post 变量 2 使用变量查询数据库 3 返回 XML 我设置了一个测试 我想用 post 变量触发 H
  • 如何使用 NextJS Links 处理电话号码?

    我有一个使用 Next Link 的 Link 组件 我传入的电话号码格式如下 tel 15555555555 但是我收到错误 Invalid href passed to router tel 15555555555 不支持电话号码吗 N
  • Swift 和 NSUserDefaults - 当用户默认为空时 EXC_BAD_INSTRUCTION

    我正在将我的一个项目逐个文件转换为 Swift 我对 NSUserDefaults 有一个奇怪的行为 我使用 NSString 而不是 String 来与其他代码兼容 var selectedMonth NSString get retur
  • 将 CGRect 标准化为 0 到 1 之间

    正常化的最佳方法是什么CGRect值使其介于 0 和 1 单位坐标系 之间 一个非常简洁的方法是 CGAffineTransform t CGAffineTransformMakeScale 1 0 parentRect size widt
  • Java 连接池

    我搜索了连接池并阅读了相关内容 如果我理解正确的话 连接池就像打开连接的集合 如果建立或创建了连接 则应将其添加到连接池中 如果该连接已关闭 则应将其从连接池中删除 当它打开时 我可以一次又一次地使用它 在阅读这些有关连接池的教程和解释时
  • PyQt4 和 PyQt5 中的 QFileDialog 字符串有区别吗?

    我有一段使用 Python3 和 PyQt5 打开 QFileDialog 的代码块 from PyQt5 QtWidgets import QApplication QWidget QPushButton QFileDialog impo
  • 如何使 JSP 标记文件不忽略所有空格?

    我真的被这个难住了 我想输出一个列表 并让标记文件处理逗号 单数与复数等 但是当我显示列表时 它完全忽略空格 所以一切都像这样一起运行 我尝试使用 HTML 实体 thinsp ensp 和 emsp 我不能使用 nbsp 这些必须被破坏
  • 如何打印我的单选按钮并在文本区域中输入类型文本?

    我有带有四个单选按钮和一个输入类型文本的调查问卷 按顺序打印 不删除前一张 var todos input type radio todos on click gt var newText Array from todos forEach
  • 如何从express重定向到react-router?

    我正在将身份验证添加到我的应用程序中 该应用程序使用react router 我已经在之后设计了客户端路由认证流程示例在react router中 但使用passport而不是示例使用的localstorage 这一切都很好 下一步是保护我
  • 如何在Inno Setup中设置安装文件夹的权限

    我正在使用 Inno Setup 创建应用程序的安装程序 第一次运行时 我的应用程序正在创建一个 SQLite 数据库 但当用户没有修改安装文件夹的权限时 它无法实现这一点 我设法设置文件的权限 Files Source D jar Des
  • 使用 Vuforia 和 Unity 仅创建一次具有地平面检测的对象

    我正在尝试使用 Unity 和 Vuforia 创建 AR 应用程序 我有一个 3D 模型 需要在检测到地平面时生成 但这只需要发生一次 Vuforia 的工作方式是 当检测到新飞机时 它会继续生成对象 所以我需要做的是要么只检测一次平面
  • 如何查询非数字字段上的“之间”数字数据?

    我刚刚在数据库中发现了一个查询失败 导致报告失败 查询的基本要点 Select From table Where IsNull myField lt gt And IsNumeric myField 1 And Convert int my
  • 使用过滤查询*:*时Solr默认是如何排序的?

    我们当前的页面设置未应用过滤器 方面 查询 它是所有内容的列表 使用寻呼机 过滤器查询类似于 任何领域的任何内容 我无法弄清楚内容是如何排序的 它说这是 相关性 但是当您选择所有内容时 这意味着什么 我做了一些快速测试 它似乎没有按内容修改
  • 如何在批处理文件中将变量与字符串或变量连接

    我想将变量与字符串连接起来 在第 7 行到第 11 行中 我尝试连接 somevariable 使用字符串或使用 P 变量 但这似乎不起作用 IE 当前文件夹中有文件 0 1 en pdf 该脚本将文件名快捷方式设置为第一位数字 之后我想用
  • html 表格行的行计数器

    我在 JSF Web 应用程序中有 HTML 表 我正在使用动态生成行
  • 如何在 Kotlin 中比较 Short 和 Int?

    我有一个Short我需要检查其值的变量 但编译器抱怨说Operator cannot be applied to Short and Int 当我进行简单的等于检查时 val myShort Short 4 if myShort 4 lt
  • 如何更改 DatagridView 中的标题文本 - 在代码 C# 中?

    如何更改标题文本DatagridView以及如何在 C 代码中添加或删除列 如果您使用数据绑定到类型和自动生成的列 则这就是 DisplayName i e DisplayName Last name public string LastN
  • 在Python中处理非常小的数字

    我目前在我的 python 程序中处理非常小的数字 例如 x 200 2e 26 一种解决方案是使用对数值 这会增加浮点值的范围 问题是我也必须对这些值进行快速傅立叶变换 因此使用对数方法是不可用的 并且使用Decimal 模块都不是 还有
  • 无法加载或实例化 TagLibraryValidator 类:org.apache.taglibs.standard.tlv.JstlCoreTLV

    所以我在 Gemini 运行时下的 OSGi 中使用 JSTL 当我尝试访问我的网址时 出现以下异常servlet SEVERE Servlet service for servlet jsp threw exception org apa
  • C++03 `throw()` 说明符和 C++11 `noexcept` 之间有什么区别?

    有什么区别吗throw and noexcept除了分别在运行时和编译时检查之外 这篇维基百科 C 11 文章建议弃用 C 03 throw 说明符 为什么会这样 是noexcept有足够的能力在编译时涵盖所有这些吗 注 我检查过这个问题