Cal*_*orm 0 c++ exception-handling exception
我想知道抛出的对象是否遵循c ++中与其他所有相同的范围规则.这是一个例子.
try{
Error err;
err.num = 10;
err.str = "This will be thrown."
throw err;
}
catch(Error e){
cout << "Error num is: " << e.num << " error string is: " << e.str << endl;
}
Run Code Online (Sandbox Code Playgroud)
这是否有效或是否err在try块中创建的事实阻止它在catch块中使用?
我想知道抛出的对象是否遵循c ++中与其他所有相同的范围规则.
抛出的对象本身没有范围,因为范围仅适用于名称,并且没有名称.它有一个稍微特殊的生命周期:它由throw语句构造在某处,然后在处理完异常后销毁.在这种情况下,抛出的对象是一个副本err.此外,由于您按值捕获,捕获的对象e是抛出对象的副本,而不是对象本身.
这是否有效或者
err在try块中创建的事实是否阻止它在catch块中使用?
它"有效",你可以访问块中的e(副本err)catch.你不能访问err它自己,因为它超出了范围并在程序离开try块时被销毁; 但是在你离开catch街区之前,副本仍然完好无损.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |