noexcept相关内容

为什么不将向量访问运算符指定为 noexcept?

为什么没有指定std::vector的operator[]、front和back成员函数作为 noexcept? 解决方案 noexcept 标准的政策是只标记不能或不能 失败,但不是那些简单指定不抛出异常的.换句话说,所有具有有限域的函数(传递错误的参数,你会得到未定义的行为)都不是 noexcept,即使它们没有被指定为抛出. 被标记的函数是诸如 swap(不能失败,因为异常安全 ..
发布时间:2022-01-07 11:33:18 C/C++开发

C++03 throw() 说明符 C++11 noexcept 之间的区别

throw() 和 noexcept 除了分别在运行时和编译时检查之外,还有什么区别吗? 这篇维基百科 C++11 文章表明 C++03 抛出说明符已弃用. 为什么是这样,noexcept 是否足以在编译时涵盖所有这些内容? [注意:我检查了这个问题和这篇文章,但无法确定弃用的确切原因.] 解决方案 异常说明符已被弃用,因为异常说明符通常是一个糟糕的主意.添加 noexcep ..
发布时间:2021-12-17 17:07:01 C/C++开发

我什么时候应该真正使用 noexcept?

noexcept 关键字可以适当地应用于许多函数签名,但我不确定何时应该考虑在实践中使用它.根据我目前所读到的内容,最后一分钟添加的 noexcept 似乎解决了移动构造函数抛出时出现的一些重要问题.但是,对于一些实际问题,我仍然无法提供令人满意的答案,这些问题使我首先阅读了有关 noexcept 的更多信息. 有很多我知道永远不会抛出的函数示例,但编译器无法自行确定.在所有这些情况下,我应 ..
发布时间:2021-12-17 16:45:11 C/C++开发

如何使用 SFINAE 检测 noexcept 方法

我问的是一个(流行的)问题的变体 - 检测类的方法的存在. 我在这里阅读了很多答案,大多数(C++17 后)解决方案看起来像 这个: #include 模板结构空洞{使用类型 = 无效;};模板结构 has_foo : std::false_type{};模板struct has_foo().foo())>::type>:std::true_type{}; 基本上,我们让编译器决定使用“ ..
发布时间:2021-06-02 21:23:56 C/C++开发

noexcept关键字和_NOEXCEPT宏之间有什么区别?

我是C ++的初学者,我正在学习某些C ++ 11功能.我注意到的一件事是,在Visual C ++ stdlib的某些部分中,作者使用了 _NOEXCEPT 宏而不是 noexcept 关键字.将鼠标悬停在宏上说 #define _NOEXCEPT noexcept ,所以我有点困惑它的意义是什么.两者之间有什么区别,我应该优先选择另一个吗? 编辑:我刚刚在GitHub上搜索了它,看起来像 ..
发布时间:2021-04-20 18:40:03 C/C++开发

我应该声明我的异常的副本构造函数吗?

斯科特·迈耶斯(Scott Meyers)说,在更有效的C ++ 中 C ++指定要复制作为异常抛出的对象. 然后我想,如果复制构造函数又抛出一个异常,则会调用 std :: terminate ,因此这是声明我所有异常的复制构造函数的一个很好的理由 noexcept(而且,我猜也不要抛出从堆中分配内存的对象,例如 std :: string ). 但是我很惊讶地看到GCC 4. ..
发布时间:2021-04-20 18:36:56 C/C++开发

constexpr隐含noexcept吗?

constexpr 说明符是否暗示函数的 noexcept 说明符?回答到简单检查显示出它的答案.并非如此. constexpr布尔f(int)noexcept{返回true;}constexpr布尔g(int){返回true;}static_assert(noexcept(f(1)));static_assert(noexcept(g(2)));//注释此行以检查运行时行为#include ..
发布时间:2021-04-19 20:51:08 C/C++开发

当不抛出零成本时,noexcept没用吗?

如果您的实现具有零成本(如果未抛出任何异常)异常模型,则 noexcept 说明符是否无用?缺少 noexcept 会导致后果的例子是什么? 解决方案 如果您的实现具有零成本(如果未抛出任何异常)异常模型,则 noexcept 指定符是否无用? 否,即使异常对性能完全没有影响, noexcept 还是有用的。 一个例子是 noexcept 可以表示可以使用哪种算法。例如,使 ..
发布时间:2020-10-06 20:43:28 C/C++开发

在派生类中使用noexcept

在派生类上使用noexcept说明符时遇到问题,更确切地说,当父级是抽象类(具有protected构造函数)时. 此后是我声明类的示例. 在基类中具有public构造函数:一切正常. 与protected相同的代码,派生的类不再“不可移动". 我想念什么吗? std::is_nothrow_move_constructible是在派生类声明中使用的正确特征还是我应该使用其他东西 ..
发布时间:2020-07-01 19:42:21 C/C++开发

什么时候std :: priority_queue :: pop会引发异常

std::priority_queue的 pop() 方法不是声明为noexcept,因此理论上可能会引发异常.但是它什么时候会引发异常,这些异常又会是什么呢? 解决方案 可以标记为nothrow,但不能标记为 . 为什么std::priority_queue::pop不能 * 不扔 void pop(); 从优先级队列中删除顶部的元素.有效呼叫 std::pop_he ..
发布时间:2020-07-01 19:42:00 C/C++开发

对于明显无法抛出的简单函数,我应该使用noexcept吗?

"Effective Modern C ++"的项目14建议在不发出异常的情况下声明函数noexcept.我有一类具有许多小型成员函数的类,这些函数由于非常琐碎的原因而无法抛出异常,例如他们只对POD执行简单的数学运算.我应该声明这样的功能noexcept吗?对我来说,即使编译器也可以肯定地检测到没有抛出的可能性,这似乎太过致命了. 编辑:为了稍微澄清我的问题,在此中给出的建议问题是“在很明 ..
发布时间:2020-07-01 19:40:42 C/C++开发

添加`noexcept(false)`是否以任何方式使代码受益?

最近在我的代码中,我已经在我知道确实会引发异常的函数上显式编写noexcept(false),主要是供那些阅读代码的人使用.但是,我想知道这是否影响我的代码的行为或编译器解释它的方式.有什么区别吗? 注意:我知道析构函数是隐式的noexcept,并且您必须指定noexcept(false)来进行更改,我想知道其他函数. 解决方案 没有异常说明符,并且明确声明noexcept(fals ..
发布时间:2020-07-01 19:40:38 C/C++开发