我发现以下代码抛出了带有参数消息的异常,但是GCC可以成功编译它而没有任何错误。
当我使用clang进行编译时,结果是失败。我想调试GCC编译过程,以发现与GCC选项-Q
的区别,但似乎不起作用。我希望有人能给我一些建议,或者告诉我为什么GCC可以成功地编译它。
T* lpItem = new T;
if (NULL == lpItem)
{
throw std::exception("New CachePool Item Fail");
}
答案 0 :(得分:1)
GCC正在利用[member.functions]
添加类似
std::exception::exception(const char *);
C不是
对于C ++标准库中描述的非虚拟成员函数,实现可以声明一组不同的成员函数签名,前提是对该成员函数的任何调用都会从本文档中描述的声明集中选择一个重载。文档的行为就像选择了该重载一样。 [注意:例如,一个实现可以添加具有默认值的参数,或者用具有相同行为的两个或多个成员函数将成员函数替换为具有默认参数的成员函数,或添加其他签名作为成员函数名称。 — 尾注]
添加了重点