我最近开始将std::exception
所有异常用作基类。what()
如果不将virtual
关键字放在它前面,我将无法正确覆盖。如果没有virtual
关键字,它似乎总是调用what()
基类的函数std::exception
.
这让我有点困惑,因为我认为virtual
在覆盖函数时永远不需要放在函数前面(这是一篇似乎证实了这一点的帖子)。但我决定放手,继续前进。
然后今天在阅读 O'Reilly 的“Safe C++”时,我发现作者也what()
使用了 virtual 关键字。他写了...
virtual const char* what() const throw () { /* stuff */ }
为什么他要覆盖一个函数并使用virtual
关键字?正如我在上面引用的帖子中所建议的那样,它只是为了“文档”吗?