15

この行がぶら下がっているポインタを作成するのだろうか:

string arg="derp";
throw std::runtime_error("Unknown argument "+arg);

std::runtime_errorをコピーしますかstring、それとも参照を保存しますか?

4

3 に答える 3

13

std::exceptionstd::runtime_error継承元)は、標準で明示的に呼び出されていなくても(私が見つけることができる)、メッセージのコピーを作成する必要があります。一般的なケースでは、クラスがメッセージexceptionのソースがそれよりも長く存続することを期待する理由はありません。what()

于 2012-05-17T23:52:09.877 に答える
1

文字列参照を取ります。それを参照として catch ブロックに渡しますが、文字列リテラルをコンストラクターに渡すと、一時文字列オブジェクトが作成されます。また、文字列リテラルで + arg を実行しないでください。これは構文エラーです。

于 2012-05-17T23:46:51.173 に答える
0

ポインタはどこですか?文字列リテラルをコピーしconst std::string&、実行時エラーを作成するときに暗黙的にキャストしています。

于 2012-05-17T23:43:31.620 に答える