2 つの質問 1) オブジェクト/変数が catch にスローされるとどうなりますか? たとえば、
int foo() {
FILE *fp = ....;
int dummy = 10;
int *dummy_ptr = new int[10];
throw 1;
}
int main() {
try {
foo();
} catch (int &i) {
std::cout<<"ERROR, the value is "<<i<<std::endl;
}
}
この状況で、ここで何が起こりますか?新しい変数が作成されて渡されました???
参照なしでポインターまたは変数を使用するとどうなりますか
catch(int *i) // または catch (int i) のように
また、スコープ内で宣言または開始されたすべての変数/リソースは解放/クローズされていますか?
2) 再スローの場合も、参照を使用して再スローする場合、2 番目のキャッチは新しい変数を取得します。参照なしで (つまり) 値で再スローすると、中間スローで行われた変更は影響を受けません。 ....
int goo() {
throw 2;
}
int foo() {
try{
goo();
} catch(int &i) { // (or) catch(int i) // i is not changing in the next line.
i = 2;
throw;
}
}
int main() {
try {
foo();
} catch (int &i) {
std::cout<<"ERROR, the value is "<<i<<std::endl;
}
}
OUTPUT: catch(int &i) // 2 を出力します catch(int i) // 1 を出力します
私の判断では、
私が思うのは、それが参照である限り、中間ステップで「値渡し」すると値が影響を受けるということです。元のオブジェクトを 2 番目のキャッチにスローします。
(つまり) 変数の制御フローは実際には中間キャッチをスローしません.....