C++中conexcept
时间: 2023-07-11 09:16:08 浏览: 90
在C++11标准中,添加了一个新的关键字`noexcept`,用来表明函数是否可能抛出异常。`noexcept`可以用在函数声明、函数定义以及函数对象的操作符括号中。
`noexcept`有两种形式:
1. `noexcept`:表示该函数不会抛出异常。
2. `noexcept(expression)`:表示该函数在满足表达式`expression`不抛出异常的条件下,不会抛出异常。
使用`noexcept`有以下好处:
1. 当一个`noexcept`函数调用另一个`noexcept`函数时,编译器可以进行一些优化,例如省略异常处理代码等。
2. 在使用`noexcept`的情况下,编译器可以生成更高效的代码。
示例代码如下:
```c++
// 声明foo函数不会抛出异常
void foo() noexcept;
// 定义bar函数在满足a不为0的条件下不会抛出异常
void bar(int a) noexcept(a != 0) {
if (a == 0) {
throw "a is zero";
}
}
// 定义一个lambda表达式,在不使用捕获变量的情况下不会抛出异常
auto lambda = []() noexcept { return 42; };
```
需要注意的是,如果一个`noexcept`函数抛出了异常,程序会直接调用`std::terminate`函数终止程序。因此,只有在确定函数不会抛出异常的情况下,才应该使用`noexcept`关键字。
阅读全文