sus*_*att 24 c++ standards visual-c++
我刚才注意到的事情.定义exception的标准(18.6.1):
class exception {
public :
exception() throw();
exception(const exception &) throw();
exception& operator=(const exception&) throw();
virtual ~exception() throw();
virtual const char* what() const throw();
};
Run Code Online (Sandbox Code Playgroud)
exception在MSDN中的定义:
class exception {
public:
exception();
exception(const char *const&);
exception(const char *const&, int);
exception(const exception&);
exception& operator=(const exception&);
virtual ~exception();
virtual const char *what() const;
};
Run Code Online (Sandbox Code Playgroud)
看起来Microsoft的版本允许您为exception对象指定错误消息,而标准版本只允许您为派生类执行此操作(但不会阻止您exception使用未定义的消息创建泛型).
我知道这是非常微不足道的,但仍然存在.有这么好的理由吗?
Bo *_*son 19
没有任何好的理由.MS实现选择将字符串处理放在std :: exception中,而不是在从它派生的每个类中(<stdexcept>).
由于它们实际上也提供了标准所要求的接口,因此可以将其视为符合标准的扩展.符合标准的程序按预期工作.
其他实现不这样做,因此可移植程序不应使用额外的构造函数.