标签: noexcept

函数typedef中的noexcept说明符

函数typedef中是否接受noexcept说明符?

如:

 typedef void (*fptr)()  noexcept;
Run Code Online (Sandbox Code Playgroud)

直觉上,noexcept说明符似乎有意义,因为它们允许在调用者方面进行一些优化.

我从gcc 4.6.1得到了一个复杂的答案.

 typedef void (*fptr)()  noexcept;
Run Code Online (Sandbox Code Playgroud)

导致:错误:使用异常规范声明'fptr'

但:

template<void (*FPtr)()  noexcept>
struct A{};
Run Code Online (Sandbox Code Playgroud)

编译时没有警告.

c++ function-pointers noexcept c++11

15
推荐指数
1
解决办法
1317
查看次数

使用gcc接受的"noexcept"构造函数的程序,被clang拒绝

代码:

struct T { T() {} };

struct S
{
    T t;

    S() noexcept = default;
};

int main()
{
//    S s;
}
Run Code Online (Sandbox Code Playgroud)

g ++ 4.9.2接受此但没有错误或警告,但第7行的clang 3.6和3.7报告:

error: exception specification of explicitly defaulted default constructor does not match the calculated one
Run Code Online (Sandbox Code Playgroud)

但是,如果该行S s;未被注释掉,g ++ 4.9.2现在报告:

noex.cc: In function 'int main()':
noex.cc:12:7: error: use of deleted function 'S::S()'
     S s;
       ^
noex.cc:7:5: note: 'S::S() noexcept' is implicitly deleted because its  exception-specification does not match the implicit exception-specification '' …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang noexcept c++11

15
推荐指数
1
解决办法
3749
查看次数

C++ 11,`noexcept`说明符,定义与声明

如果声明的函数具有noexceptspecificator( ,noexcept,noexcept(true),noexcept(false)或任何其他noexcept(expr)计算结果为truefalse),但它在另一个地方定义的,做我需要指定noexcept再次定义符,或仅在其向前声明?

c++ function-declaration noexcept c++11

15
推荐指数
1
解决办法
1196
查看次数

如何在C++中使用noexcept或它是如何工作的?

我无法理解noexceptC++ 11/14中in关键字的用法和用途.我的意思是它是那些不发射的功能的签名exceptions.但它真的有效吗?

请看下面的代码:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void seev (vector<int> &v) noexcept;
void seev (vector<int> &v) noexcept
{
    for (int i=0;i<10;++i)
    {
        cout<<v.at(i)<<' ';
    }
}
int main()
{
    vector<int> v {1,2,3,4,5};
    seev(v);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码肯定会抛出一个out_of_range exception.所以noexcept这里的使用是没用的,或者是吗?

我的疑问是:

  1. noexcept工作怎么样?

  2. 怎么用?

  3. 什么throw()不能做到这noexcept一点?

noexcept c++11

15
推荐指数
3
解决办法
7908
查看次数

为什么deque的pop_front()和pop_back()不是noexcept?

有什么理由说std::dequepop_front(),并pop_back()没有noexcept在C++ 11或更高或者是只是忘记了吗?

c++ deque c++-standard-library noexcept c++11

15
推荐指数
1
解决办法
792
查看次数

"noexcept"vs"投掷:什么都没有"

在经历C++ 0x工作草案的最后编辑时,我发现了很多

  • 删除关键字 noexcept
  • 添加文本投掷:没有在同一个地方

反之亦然.只是一些例子:

  • 更换noexcept反对投掷:无:20.6.4指针安全[util.dynamic.safety] template<class T> T*undeclare_reachable(T*p);
  • 增加noexcept:20.6.3.2.指针特征成员函数[pointer.traits.functions]:static pointer pointer_trait<T*>::pointer_to(...) noexcept;

问题在这里:

  • 是否有一个一般的规则/模式,我们会发现noexcept抛出:没有在STD-库?
  • 用户是否应该根据给定规则获得特定行为?即他们应该或不应该添加noexcept自己的功能?

c++ exception noexcept c++11

14
推荐指数
1
解决办法
2019
查看次数

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

最近在我的代码中,我已经明确地编写noexcept(false)了我知道会抛出异常的函数,主要是为了阅读代码的人.但是,我想知道这是否会影响我的代码行为或编译器解释它的方式.它有什么不同吗?

注意:我知道析构函数是隐式noexcept,你必须指定noexcept(false)更改它,我想知道其他函数.

c++ noexcept c++11

14
推荐指数
1
解决办法
3574
查看次数

添加noexcept是否会破坏二进制兼容性?

简单的问题:如果改变这个:

void someMethod();
Run Code Online (Sandbox Code Playgroud)

void someMethod() noexcept;
Run Code Online (Sandbox Code Playgroud)

它会破坏二进制兼容性,还是方法签名保持不变?

c++ binary-compatibility noexcept

14
推荐指数
1
解决办法
223
查看次数

如果我故意标记一个函数[我知道可能会抛出] noexcept 以在发生异常时立即终止,我的代码是否格式不正确?

我知道,标记一个函数noexcept可能有助于[在某些情况下]获得许多很棒的优化,例如移动语义。但是假设,我的代码中有一个函数执行非常关键的操作,如果该函数失败,则意味着发生了非常糟糕的事情以至于无法恢复,并且该程序应该立即终止。如果我故意标记这样一个函数,noexcept即使我承认有异常的可能性,只是为了在发生异常时杀死程序怎么办?

有些东西告诉我这不是它应该使用的用途,但它是 的有效用途吗noexcept

c++ noexcept

14
推荐指数
2
解决办法
302
查看次数

如果类型为noexcept,C++ 11 STL中的哪些算法和容器可以更快?

关于使用noexcept需要多少关注的问题,正在进行一场辩论.我们都知道noexcept对于编译器的优化器并没有真正做大量的事情,除了外部定义的代码,编译器否则必须假设它可以抛出,因为它无法知道它的实现,因此标记事物的唯一真正的其他性能优势noexcept用于使用std :: move_if_noexcept <>的代码,假定它主要是STL容器及其算法.

因此,该评估将是这样的:你不能使用noexcept,除非:

  1. extern函数和类,其中编译器不知道可调用的实现.

  2. 移动构造函数,移动赋值运算符并交换可能包含在STL容器中的任何类型.

  3. 否则不要担心.

这是一个公平的评估吗?STL中还有其他地方可以产生更优化的代码吗?如果是这样,哪个STL实现是这个,什么需要标记为no,除了它工作,以及什么性能的好处导致(更少的内存分配,更低的复杂性)?

编辑:使CashCow建议更改措辞.

c++ algorithm stl noexcept c++11

13
推荐指数
1
解决办法
587
查看次数