在为<cmath>
库中的某些内容添加重载函数定义时,我发现clang ++ vs g ++行为有所不同。
具体来说,在这个程序中:
#include <cmath>
#include <iostream>
double cos(double x) throw();
int main() {
std::cout << cos(1.0) << std::endl;
return 0;
}
double cos(double x) throw() {
return 10;
}
当我使用clang++
进行编译时,它会调用cos
的重载版本并打印10
,但是g++
会调用数学库中的版本并打印{ {1}}。
有趣的是,如果我在0.540302
之前放置函数定义(而不仅仅是原型),g++
也会调用我的重载cos
。
这里有一些未指明的行为,或者其中一个编译器中的错误?在这种情况下,我无法弄清楚标准应该发生什么。
我已尝试使用两个编译器的多个版本并获得相同的行为,除了参数main
未使用之外没有任何警告。