【发布时间】:2021-03-19 21:39:42
【问题描述】:
这段代码:
#include <stdlib.h> // int abs(int);
int abs(int i = 0) { return 42; }
int main() {
return abs(1); // Returns 42
}
返回42。
编译器选择重载的 C++ 函数。我在许多版本的 g++/clang 上对此进行了测试。我可以依靠这种行为吗?它是否记录在任何地方?
【问题讨论】:
-
已记录在案。至于参考,请参阅此en.cppreference.com/w/cpp/language/…。 (在某些没有副作用的实现中,abs 可以是
std::abs和using std::abs;)
标签: c++ overloading overload-resolution linkage extern-c