gpt4 book ai didi

c++ - 继承自 std::exception,std::exception 定义中的歧义

转载 作者:太空狗 更新时间:2023-10-29 23:48:24 25 4
gpt4 key购买 nike

所以我有点困惑,我一直在四处寻找,试图为我自己的类型确定一种从 std::exception 继承的合适方法。现在根据 cplusplus.com(我知道这不一定是标准,这就是我问的原因),std::exception 是一个没有成员的基类。然而,在查看了我对标准库 (VS 2005) 的实现后,类 std::exception 非常清楚地定义了两个成员变量:

class _CRTIMP_PURE exception
{ // base of all library exceptions
...
private:
const char *_m_what;
int _m_doFree;
};

现在是将这些成员包含在基类 std::exception 中的标准,我的理解是它不是。我问的原因是我的派生异常类实际上只需要一个字符串作为它的信息,因此这个实现可以正常工作。但是,我担心这是非标准的,因此我最好从 std::exception 继承并自己添加适当的成员 + 复制/赋值代码。

最佳答案

std::exception 类定义为:

namespace std { 
class exception {
public:
exception() throw();
exception(const exception&) throw();
exception& operator=(const exception&) throw();
virtual ~exception() throw();
virtual const char* what() const throw();
};
}

当谈到可替代性时,这是您必须遵守的契约。该标准定义了每个成员的细节。通常唯一需要考虑的是 what() 返回一个 “以空字符结尾的多字节字符串,适合显示为 wstring。另一部分是遵守和确保 throw() 契约。

关于c++ - 继承自 std::exception,std::exception 定义中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1099436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com