Clang ++ vs g ++重载函数声明顺序的区别

时间:2017-04-19 16:05:26

标签: c++ g++ clang++

在为<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未使用之外没有任何警告。

0 个答案:

没有答案