默认的catch语句如何catch(...) {}通过值或引用捕获异常?
其次,默认抛出如何throw;通过值或引用抛出异常?
从这个答案/sf/answers/2571688381/:
没有操作数的throw-expression重新抛出当前处理的异常.使用现有临时值重新激活该例外; 没有创建新的临时异常对象. - ISO/IEC 14882:2011第15.1节.8
那么为什么我从这段代码中得到这个结果呢?
码:
#include <iostream>
class my_exception: public std::exception{
public:
int value;
};
int main()
{
my_exception ex;
ex.value=1;
try{
throw ex;
}
catch(my_exception& e){
e.value=2;
}
std::cout << ex.value;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
实际结果:
1
我认为它应该是2,取决于标准配额.我错过了什么?
在 try catch 语句中,我们可以执行以下操作:
try{}
catch(...){}
Run Code Online (Sandbox Code Playgroud)
据我所知,...意味着任何例外。
我的问题是:为什么 C++ 标准选择这种方式(...)而不是仅仅选择这种方式()?而例如,在函数中,如果您不需要参数,您只需输入():
void foo();
Run Code Online (Sandbox Code Playgroud)
它与可变参数模板有任何关系吗?