使用默认参数解析重载的外部C函数



此代码:

#include <stdlib.h> // int abs(int);
int abs(int i = 0) { return 42; }
int main() {
return abs(1); // Returns 42
}

返回42

编译器选择重载的C++函数。我在g++/clang的许多版本上测试了这一点。我能相信这种行为吗?有记录吗?

Wandbox 上的来源

这样做会得到未定义的行为。

[extern.names]

4声明的C标准库中的每个函数签名具有外部链接的保留给实现,用作具有CCD_ 2和CCD_,或者作为全局名称空间中的名称空间范围的名称。

int abs(int)正是这样一个函数签名。您在这里使用标准库,程序的行为是未定义的。

您不能在全局命名空间中定义这样的abs函数。

最新更新