C++11中的noexcept关键字用于什么目的?请给出示例代码说明其用法。
在C++11中,noexcept
关键字用于指定一个函数不会抛出异常。这对于编译器优化和提高代码的可靠性非常有用,因为它允许编译器做出更多的假设,并且可以避免不必要的异常处理开销。
基本用法:
- 将
noexcept
放在函数声明的末尾,表示该函数不会抛出异常。
示例代码:
#include <iostream>
void noThrowFunction() noexcept {
std::cout << "This function does not throw exceptions." << std::endl;
}
void mayThrowFunction() {
std::cout << "This function might throw exceptions." << std::endl;
throw std::runtime_error("Exception thrown");
}
int main() {
try {
noThrowFunction();
mayThrowFunction();
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
在上面的示例中,noThrowFunction
被声明为 noexcept
,表示它不会抛出异常。而 mayThrowFunction
没有这个声明,因此它可能会抛出异常。在 main
函数中,我们尝试调用这两个函数,并捕获可能抛出的异常。
注意事项:
- 如果一个
noexcept
函数抛出了异常,程序将调用std::terminate
,导致程序异常终止。 - 使用
noexcept
可以提高函数的性能,因为编译器可以对不抛出异常的函数进行优化。
总结:
noexcept
关键字在C++11中引入,用于指示函数不会抛出异常。这有助于编译器优化和提高代码的可靠性。在设计不会抛出异常的函数时,应该使用 noexcept
来明确表达这一意图。