私がこれを持っているとしましょう:
namespace MyNamespace{
class Exception : public std::runtime_error
{
public:
explicit Exception(const std::string &msg) : std::runtime_error(msg) {}
};
} //namespace MyNamespace
そして、私のプログラムのどこかにコードがあります:
try{
foo();
}
catch (const MyNamespace::Exception &exc){
std::cout << exc.what();
}
質問は(私を調べてほしい)です-fooで書いた場合、例外をキャッチしますか:
1)throw MyNamespace::Exception("Hello world!");
ここで私は、はい、私は間違いなく例外のタイプを指摘したので(そしてそれは「明示的な」キーワードの必要な原因です)、 std::string には「明示的な」キーワードがないため、「こんにちは世界」をスローできると思います!」std::string("Hello world!") の代わりに
2)throw MyNamespace::Exception(std::string("Hello world!"));
明らかに、そうします。
3)throw "Hello world!";
ここでは、いいえ、そうしません。キーワードの「明示的な」存在の原因です。
4)throw std::string("Hello world");
いいえ(同じ理由)
および 5) 明示的なキーワードがなかった場合、3 ~ 4 のケースから期待されるのは誰ですか? (私はイエスと思う)
更新: 6) 一時オブジェクト std::string はいつ作成されますか? どの時点で?