问题标签 [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()
std::swap
以这种方式声明:
如果我在我的程序中禁用异常(例如-fno-exceptions
for g++)std::swap
,如果它们启用了移动,无论它们是否为 noexcept,我的自定义类型都会使用移动操作?
编辑:后续问题:
在意识到如果我的类型有 std::swap 将始终使用移动之后,我真正的问题是像这样的特征会发生什么is_nothrow_move_assignable<>
?
std::vector
如果我的类型有noexcept(true)
移动操作,在重新分配时总是会使用移动吗?
c++ - 是否有自动 noexcept 说明符?
我听说这个noexcept
关键字更像是“它永远不应该抛出异常”而不是“它不会”。
noexcept
如果我不确定它是否引发异常,我认为使用关键字并不好,但noexcept
关键字有时与移动构造函数中的性能相关。
所以我尝试使用noexcept
限定符,但如果它在定义中有多个语句,它就会变得更难,它变成了一种复制粘贴的东西。
我认为编译器可以弄清楚函数的定义是否由非抛出语句组成,因此noexcept
如果有类似的表达式会更容易使用noexcept(auto)
,但标准中似乎没有这样的东西。
有什么方法可以简化 noexcept 表达式?
c++ - 如何找出函数模板中 T 的赋值运算符是否引发异常?
这是我的函数模板:
=
鉴于赋值运算符T
具有noexcept
规范,我想指定此函数不会引发异常。有没有办法做到这一点?
c++ - noexcept : clang++ 和 g++ 的不同行为
当我尝试用 gcc 5.1.1 编译这个程序时,我得到了一个错误 -
错误:不能调用没有对象'void A::g()'的成员函数</p>
|| 无效 f() noexcept( noexcept( g() )) {};
但是,在 clang++3.6 中可以编译,输出为1
有没有办法解决这个问题?
c++ - 为什么 std::is_nothrow_move_assignable 依赖于析构函数的存在?
我有一个像下面这样的类:
显示的两个特殊成员函数是唯一声明的。
现在,
都满意。然而,
断言。如果我删除空的析构函数,它就会通过。
析构函数与移动赋值运算符有什么关系?新的五规则?
编译器是 GCC 4.9.3 -std=c++0x
(出于历史原因)。
c++ - 关于 noexcept 的困惑
看了很多视频,看了一本书,不清楚什么时候什么时候不用noexcept。
所有的书都说你应该只在函数永远不会抛出时使用 noexcept 。
我认为应该以其他方式使用它。许多人说分配的函数不应该是 noexcept,但是如果我不想捕获这些错误怎么办,并且调用 tostd::terminate
是可以接受的?
简而言之,noexcept 应该用在永远不会抛出的函数上,还是用在除您想从中捕获异常的函数之外的所有函数上。
恕我直言,不需要捕获某些异常(即内存不足等)
c++ - C++ noexcept 规范取决于数据成员
这个声明没问题:
为一个
假设 MyClass 有一个仿函数数据成员:
我想像在前一个案例中那样编写 noexcept 规范,我尝试了这个:
但是编译器告诉我仿函数不是作用域。由于类似的原因,以下内容不起作用:
以下无法工作,因为我有一些用作 T 的类缺少默认构造函数:
以下在语法上是错误的:
尽管它形象地解释了我想要的东西。
有什么建议吗?目前我放弃了规范......
c++ - Profit from noexcept with minimal effort
I understand containers can optimize for types having noexcept move constructor / assignment / swap. But are there practical reasons (aside documentation) for specifying other operations as noexcept
?
Specifically, I'm interested if there are optimizations in the standard library to be gained by additionally having noexcept
:
- Default constructor
- Copy constructor
- Copy assignment
c++ - 在 std::function 上强制执行“noexcept”?
此代码编译并运行,抛出int
:
但是我希望编译器拒绝该行r(foo);
,因为r
应该只传递一个noexcept
函数。说明noexcept
符似乎被忽略了。有没有办法做到这一点?
编辑:这个问题不同于传递函数指针时是否应该转发关于 noexcept-ness 的知识?因为我正在寻求补救措施,特别是在std::function
.
c++ - 在构造函数期间调用哪个运算符分配给 const 引用(re.noexcept)
当我调用一个将传递const &
给const &
成员变量的构造函数时,会发生什么?由于 a const ref
,我的理解是“非常少” - 没有副本、移动、调用构造函数等 - 只是复制可能变成指针的东西。
例如
特别是,如果我想声明 as 的函数(例如这里的构造函数),ClassB
我noexcept
需要知道什么(如果有的话)ClassA
?