我只是偶然发现了这段代码:
void somefunction()
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
我想知道:这是什么意思?
我将问题标记为C++和Visual C++,因为我不知道答案.答案可能与标准或特殊的Visual C++扩展或忽略标准的Visual C++有关.这就是为什么我认为这两个标签都是合理的.
小智 9
它重新抛出当前活动的异常.从catch-block中调用它(可能是间接的)是有意义的.这个:
#include <iostream>
using namespace std;
void f() {
throw;
}
int main() {
try {
try {
throw "foo";
}
catch( ... ) {
f();
}
}
catch( const char * s ) {
cout << s << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
打印"foo".
对于throw"外部"或"内部"的概念,catch块是在运行时术语中定义的,而不是在您似乎假设的编译时术语中定义的.因此,如果在块的throw运行时上下文中执行的运行时期间catch,throw则按预期工作.否则,terminate()被称为.
实际上,如果你仔细看看如何在语言规范中定义C++异常,那么很多关于它们的东西都是在运行时术语中定义的.有时它甚至看起来像是非C++.
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |