假设我有这个:
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 没有“显式”关键字,这意味着我可以抛出“Hello world !” 而不是 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?在什么时间点?