我遇到了一些代码,像这样:
if( Some_Condition ) throw 0;
Run Code Online (Sandbox Code Playgroud)
我google了一下,发现了一些其他代码片段使用那种奇怪的外观throw 0.
我认为有人会认为这是:
catch(const int& e)
{ }
Run Code Online (Sandbox Code Playgroud)
或者这是一个NULL ptr?被抓住了void*?
这是throw 0做什么的?它在某种程度上是特别的吗?
我的正常偏好是扔东西(或衍生自)std::exception.所以对我来说这看起来很糟糕.这是"坏"吗?
Art*_*yom 17
通常throw可以抛出任何类型,任何你需要使用此类型或其基类型捕获它.
从技术上讲,它是合法代码,但......
它是错误的代码:你应该总是std::exception从某个类派生你的异常,或者至少从某个类派生异常,它提供一些关于错误而不是普通数字的有用信息.但是从获得std::exception是在正确的方式,因为它允许使用最顶层catch(std::exception const &e),并至少获得一些有关错误的信息.