问题标签 [noexcept]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1268 浏览

c++ - 理论上但不是实际上的抛出函数应该声明为 noexcept 吗?

noexcept即使v.at(idx)理论上可以抛出out_of_range异常,但实际上不是由于边界检查,声明以下函数是否安全?

0 投票
2 回答
1337 浏览

c++ - noexcept 练习风格和性能?

我开始添加noexcept到我的代码中,但我想知道是否将其添加到内联函数中是否明智。我假设优化器在明显不需要时会省略运行时检查......但从人类/风格的角度来看,是否值得将 noexcept 添加到 getter、设置、增量函数等琐碎的函数中?我认为这是完全明显的视觉混乱。我正在讨论一个规则,即内联函数可以省略 noexcept,但是如果它们不抛出,普通的 .hpp/.cpp 函数必须有它。

其次,我有大量根本无法抛出的代码,因为它没有分配(在我的国际象棋引擎中),不包括 STL 或其他任何可能失败的东西,所以总是可以保证成功。noexcept 不会因为运行时检查而减慢它的速度吗?有没有人使用宏在使用构建之间切换noexceptDEBUG但切换到throw()发布,这只是编译时的?

0 投票
1 回答
43 浏览

c++11 - 实现一个固定的运行时大小的数组。应该移动ctor并交换抛出异常吗?

问题std::array在于它具有固定的编译时大小。我想要一个可以使用动态大小创建的容器,但该大小在容器的整个生命周期内保持固定(因此std::vector不起作用,因为push_back会将大小增加 1)。

我想知道如何实现这一点。我尝试编写一个包含内部std::vector存储的类,并且只公开std::vector不改变大小的成员。我的问题是关于复制/移动赋值运算符以及swap成员函数。通常,移动赋值声明为noexcept. 但是,在分配之前,我必须检查 thelhs和 therhs的大小是否相同。如果不是,我必须抛出一个异常,因为否则,分配rhslhs会改变 的大小lhs,这是我不想要的。也是swap如此,在我的实现中也是noexcept出于同样的原因。

我知道我违背了通常的建议来制作swap和移动作业noexcept(Scott Meyers 的 Modern Effective C++ 的第 14 项),所以我想知道这是否是好的设计?还是有更好的方法来实现固定运行时大小的容器?

示例:假设我已经使用名称定义了我的固定大小容器FixedSizeArray<T>

最后一行代码定义了一个FixedSizeArray包含大小为 4 的双精度数。现在定义另一个:

应为以下行:

扔?关于什么:

0 投票
2 回答
67 浏览

c++11 - 隐式移动 ctor/assignmet 操作是否例外?隐式复制操作呢?

问题标题说明了一切。我需要知道是否default声明了编译器隐式实现的复制/移动分配/ctors noexcept

0 投票
3 回答
3525 浏览

c++11 - C++ 为什么在移动构造函数和移动赋值运算符的上下文中需要 noexcept 来启用优化?

考虑以下具有移动构造函数和移动赋值运算符的类:

来这里的目的是noexcept什么?我知道这是对编译器的打击,以下函数不应抛出异常,但这如何启用编译器优化?

0 投票
1 回答
614 浏览

c++ - 为什么 std::array::front 和 std::array::back 不是 noexcept?

我是使用说明noexcept符的新手,我不明白为什么std::array::front并且std::array::back没有声明noexcept(而std::array::beginstd::array::end是)。

这是什么原因?

0 投票
1 回答
284 浏览

c++ - 使用 noexcept C++11 正确实现函数

这些功能是否正确实现noexcept/throw()

第一个函数

"Hello" literal将创建新std::string对象,它可能会引发异常。

这个异常是在函数外抛出还是在函数内抛出?

第二个功能:

strlen之所以选择它是因为它是旧C功能并且会崩溃,因为sis nullprt

但是,此崩溃与异常无关。假设正确吗?

0 投票
0 回答
2279 浏览

c++ - 错误:“noexcept”没有命名类型

似乎它从未发生在任何人身上,所以我想我做错了什么......我得到的错误是:

代码是这样的:

如果重要的话,代码实际上也在宏中。

谢谢!

0 投票
5 回答
348 浏览

c++ - 移动赋值运算符的异常说明符如何影响移动构造函数的异常说明符?

我正在使用 C++14 模式下的 GCC 5.2 和 clang 3.6 进行测试,它们给出了相同的输出。

对于以下代码

结果11得到。但如果取消注释移动赋值运算符,输出变为01. 移动赋值运算符的显式noexcept规范如何可能影响移动构造函数的规范?

0 投票
1 回答
273 浏览

c++ - noexcept 运算符 ->() 和 operator*() 用于迭代器?

我正在编写一个应该非常有效的迭代器,我想知道是否可以声明运算符operator->()operator*()因为noexcept它们只会在底层指针上调用相同的运算符(但如果指针指向不可用的内存部分,那么程序可能会崩溃)?