问题标签 [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.
c++ - 理论上但不是实际上的抛出函数应该声明为 noexcept 吗?
noexcept
即使v.at(idx)
理论上可以抛出out_of_range
异常,但实际上不是由于边界检查,声明以下函数是否安全?
c++ - noexcept 练习风格和性能?
我开始添加noexcept
到我的代码中,但我想知道是否将其添加到内联函数中是否明智。我假设优化器在明显不需要时会省略运行时检查......但从人类/风格的角度来看,是否值得将 noexcept 添加到 getter、设置、增量函数等琐碎的函数中?我认为这是完全明显的视觉混乱。我正在讨论一个规则,即内联函数可以省略 noexcept,但是如果它们不抛出,普通的 .hpp/.cpp 函数必须有它。
其次,我有大量根本无法抛出的代码,因为它没有分配(在我的国际象棋引擎中),不包括 STL 或其他任何可能失败的东西,所以总是可以保证成功。noexcept 不会因为运行时检查而减慢它的速度吗?有没有人使用宏在使用构建之间切换noexcept
,DEBUG
但切换到throw()
发布,这只是编译时的?
c++11 - 实现一个固定的运行时大小的数组。应该移动ctor并交换抛出异常吗?
问题std::array
在于它具有固定的编译时大小。我想要一个可以使用动态大小创建的容器,但该大小在容器的整个生命周期内保持固定(因此std::vector
不起作用,因为push_back
会将大小增加 1)。
我想知道如何实现这一点。我尝试编写一个包含内部std::vector
存储的类,并且只公开std::vector
不改变大小的成员。我的问题是关于复制/移动赋值运算符以及swap
成员函数。通常,移动赋值声明为noexcept
. 但是,在分配之前,我必须检查 thelhs
和 therhs
的大小是否相同。如果不是,我必须抛出一个异常,因为否则,分配rhs
给lhs
会改变 的大小lhs
,这是我不想要的。也是swap
如此,在我的实现中也是noexcept
出于同样的原因。
我知道我违背了通常的建议来制作swap
和移动作业noexcept
(Scott Meyers 的 Modern Effective C++ 的第 14 项),所以我想知道这是否是好的设计?还是有更好的方法来实现固定运行时大小的容器?
示例:假设我已经使用名称定义了我的固定大小容器FixedSizeArray<T>
。
最后一行代码定义了一个FixedSizeArray
包含大小为 4 的双精度数。现在定义另一个:
应为以下行:
扔?关于什么:
c++11 - 隐式移动 ctor/assignmet 操作是否例外?隐式复制操作呢?
问题标题说明了一切。我需要知道是否default
声明了编译器隐式实现的复制/移动分配/ctors noexcept
。
c++11 - C++ 为什么在移动构造函数和移动赋值运算符的上下文中需要 noexcept 来启用优化?
考虑以下具有移动构造函数和移动赋值运算符的类:
来这里的目的是noexcept
什么?我知道这是对编译器的打击,以下函数不应抛出异常,但这如何启用编译器优化?
c++ - 为什么 std::array::front 和 std::array::back 不是 noexcept?
我是使用说明noexcept
符的新手,我不明白为什么std::array::front
并且std::array::back
没有声明noexcept
(而std::array::begin
和std::array::end
是)。
这是什么原因?
c++ - 使用 noexcept C++11 正确实现函数
这些功能是否正确实现noexcept
/throw()
第一个函数
"Hello" literal
将创建新std::string
对象,它可能会引发异常。
这个异常是在函数外抛出还是在函数内抛出?
第二个功能:
strlen
之所以选择它是因为它是旧C
功能并且会崩溃,因为s
is nullprt
。
但是,此崩溃与异常无关。假设正确吗?
c++ - 错误:“noexcept”没有命名类型
似乎它从未发生在任何人身上,所以我想我做错了什么......我得到的错误是:
代码是这样的:
如果重要的话,代码实际上也在宏中。
谢谢!
c++ - 移动赋值运算符的异常说明符如何影响移动构造函数的异常说明符?
我正在使用 C++14 模式下的 GCC 5.2 和 clang 3.6 进行测试,它们给出了相同的输出。
对于以下代码
结果11
得到。但如果取消注释移动赋值运算符,输出变为01
. 移动赋值运算符的显式noexcept
规范如何可能影响移动构造函数的规范?
c++ - noexcept 运算符 ->() 和 operator*() 用于迭代器?
我正在编写一个应该非常有效的迭代器,我想知道是否可以声明运算符operator->()
,operator*()
因为noexcept
它们只会在底层指针上调用相同的运算符(但如果指针指向不可用的内存部分,那么程序可能会崩溃)?