问题标签 [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 投票
2 回答
515 浏览

c++ - 禁用异常和 noexcept()

std::swap以这种方式声明:

如果我在我的程序中禁用异常(例如-fno-exceptionsfor g++std::swap,如果它们启用了移动,无论它们是否为 noexcept,我的自定义类型都会使用移动操作?

编辑:后续问题:

在意识到如果我的类型有 std::swap 将始终使用移动之后,我真正的问题是像这样的特征会发生什么is_nothrow_move_assignable<>

std::vector如果我的类型有noexcept(true)移动操作,在重新分配时总是会使用移动吗?

0 投票
1 回答
1995 浏览

c++ - 是否有自动 noexcept 说明符?

我听说这个noexcept关键字更像是“它永远不应该抛出异常”而不是“它不会”。

noexcept如果我不确定它是否引发异常,我认为使用关键字并不好,但noexcept关键字有时与移动构造函数中的性能相关。

所以我尝试使用noexcept限定符,但如果它在定义中有多个语句,它就会变得更难,它变成了一种复制粘贴的东西。

我认为编译器可以弄清楚函数的定义是否由非抛出语句组成,因此noexcept如果有类似的表达式会更容易使用noexcept(auto),但标准中似乎没有这样的东西。

有什么方法可以简化 noexcept 表达式?

0 投票
1 回答
76 浏览

c++ - 如何找出函数模板中 T 的赋值运算符是否引发异常?

这是我的函数模板:

=鉴于赋值运算符T具有noexcept规范,我想指定此函数不会引发异常。有没有办法做到这一点?

0 投票
0 回答
42 浏览

c++ - noexcept : clang++ 和 g++ 的不同行为

当我尝试用 gcc 5.1.1 编译这个程序时,我得到了一个错误 -

错误:不能调用没有对象'void A::g()'的成员函数</p>

|| 无效 f() noexcept( noexcept( g() )) {};

但是,在 clang++3.6 中可以编译,输出为1

有没有办法解决这个问题?

0 投票
1 回答
156 浏览

c++ - 为什么 std::is_nothrow_move_assignable 依赖于析构函数的存在?

我有一个像下面这样的类:

显示的两个特殊成员函数是唯一声明的。

现在,

都满意。然而,

断言。如果我删除空的析构函数,它就会通过。

析构函数与移动赋值运算符有什么关系?新的五规则?

编译器是 GCC 4.9.3 -std=c++0x(出于历史原因)。

0 投票
1 回答
468 浏览

c++ - 关于 noexcept 的困惑

看了很多视频,看了一本书,不清楚什么时候什么时候不用noexcept。

所有的书都说你应该只在函数永远不会抛出时使用 noexcept 。

我认为应该以其他方式使用它。许多人说分配的函数不应该是 noexcept,但是如果我不想捕获这些错误怎么办,并且调用 tostd::terminate是可以接受的?

简而言之,noexcept 应该用在永远不会抛出的函数上,还是用在除您想从中捕获异常的函数之外的所有函数上。

恕我直言,不需要捕获某些异常(即内存不足等)

0 投票
2 回答
112 浏览

c++ - C++ noexcept 规范取决于数据成员

这个声明没问题:

为一个

假设 MyClass 有一个仿函数数据成员:

我想像在前一个案例中那样编写 noexcept 规范,我尝试了这个:

但是编译器告诉我仿函数不是作用域。由于类似的原因,以下内容不起作用:

以下无法工作,因为我有一些用作 T 的类缺少默认构造函数:

以下在语法上是错误的:

尽管它形象地解释了我想要的东西。

有什么建议吗?目前我放弃了规范......

0 投票
0 回答
123 浏览

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:

  1. Default constructor
  2. Copy constructor
  3. Copy assignment
0 投票
1 回答
2369 浏览

c++ - 在 std::function 上强制执行“noexcept”?

此代码编译并运行,抛出int

但是我希望编译器拒绝该行r(foo);,因为r应该只传递一个noexcept函数。说明noexcept符似乎被忽略了。有没有办法做到这一点?

编辑:这个问题不同于传递函数指针时是否应该转发关于 noexcept-ness 的知识?因为我正在寻求补救措施,特别是在std::function.

0 投票
2 回答
149 浏览

c++ - 在构造函数期间调用哪个运算符分配给 const 引用(re.noexcept)

当我调用一个将传递const &const &成员变量的构造函数时,会发生什么?由于 a const ref,我的理解是“非常少” - 没有副本、移动、调用构造函数等 - 只是复制可能变成指针的东西。

例如

特别是,如果我想声明 as 的函数(例如这里的构造函数),ClassBnoexcept需要知道什么(如果有的话)ClassA