有没有之间的任何其他差别throw()和noexcept除了被检查的运行时分别编译时间?
维基百科C++ 11文章表明不推荐使用C++ 03 throw说明符.
为什么这样,noexcept有足够的能力在编译时覆盖所有这些?
我刚刚创建了异常层次结构,并希望传递char*给我的一个派生类的构造函数,并带有一条告诉错误的消息,但显然std::exception没有允许我这样做的构造函数.然而,有一个类成员被称为what()可以传递一些信息.
我怎么能(我可以?)将文本传递给a的派生类,std::exception以便通过我的异常类传递信息,所以我可以在代码中的某处说:
throw My_Exception("Something bad happened.");
Run Code Online (Sandbox Code Playgroud) 我应该如何编写一个高效的异常类来显示可以通过在运行时修复源代码错误来防止的错误?
这就是我选择的原因std::invalid_argument。
我的异常类(显然不起作用):
class Foo_Exception : public std::invalid_argument
{
private:
std::string Exception_Msg;
public:
explicit Foo_Exception( const std::string& what_arg );
virtual const char* what( ) const throw( );
};
explicit Foo_Exception::Foo_Exception( const std::string& what_arg ) // how should I write this function???
{
Exception_Msg.reserve( 130000 );
Exception_Msg = "A string literal to be appended, ";
Exception_Msg += std::to_string( /* a constexpr int */ );
Exception_Msg += /* a char from a const unordered_set<char> */;
}
const char* Foo_Exception::what( ) …Run Code Online (Sandbox Code Playgroud)