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