按值或引用抛出异常

Hum*_*awi 4 c++ exception throw c++11

从这个答案/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,取决于标准配额.我错过了什么?

mar*_*inj 7

这是beacuse throw(常规版)将复制:

首先,从表达式复制初始化异常对象(这可以调用rvalue表达式的移动构造函数,复制/移动可能受复制省略),...

并在内部保留它,因此e.value=2;修改内部副本.

在SO中你提到的问题是关于重新投掷版本女巫不会制作新副本但使用已经存在的内部副本.