Bob*_*r02 0 c++ exception-handling exception
任何人都可以向我解释C++中标准异常的定义:
virtual const char* what() const throw();
Run Code Online (Sandbox Code Playgroud)
const throw()最后意味着什么?
这是两个独立的,无关的东西.
在const该成员函数将不修改任何(非手段mutable)成员变量; 这反过来意味着可以在const对象上调用它.例如:
class Foo {
public:
void a() const {
x = 5; // Compiler error!
}
void b() {
x = 5; // This is fine
}
private:
int x;
};
int main() {
Foo p;
const Foo q;
p.a(); // This is fine
p.b(); // This is fine
q.a(); // This is fine
q.b(); // Compiler error!
}
Run Code Online (Sandbox Code Playgroud)
这throw()是一个异常说明符.它声明此函数不会抛出异常.请参阅例如我应该在C++中使用异常说明符吗?讨论.
所述const,该函数不会改变它被嵌入在类的任何成员的手段,throw()是异常规范; 该函数承诺不会抛出异常.
请注意,由于C++ 11,throw不推荐使用异常规范,原因如下:异常列表太难以维护throw(...)而非表达式,因此这throw()基本上是唯一使用的规范,并且这些规范在运行时动态检查,产生大量开销,从而减慢您的应用程序.
现在,你可以放心地替换throw()用noexcept(true),或者只是noexcept.不会检查这样的方法是否实际抛出异常 - 这是对编译器的保证,反之亦然.如果抛出异常,std::terminate则调用.
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |