算法头文件中不是已经有一个max函数了吗?通过using namespace std;
,我将函数导入到全局命名空间(这需要参数,在本例中这两个函数都是整数,所以不应该是重载)。
那么为什么没有命名冲突呢?
#include <iostream>
#include <algorithm>
using namespace std;
int max(int a, int b)
{
return (a > b) ? a : b;
}
int main()
{
cout << max(5, 10) << endl;
}
发布于 2021-04-29 10:53:53
发布于 2021-04-29 11:01:44
通过
using namespace std
,我将函数导入到全局命名空间
这是一个常见的误解。没有东西是进口的。实际上,将指令using namespace std;
放在全局命名空间中意味着,当在全局命名空间中查找名称时,该名称也会在命名空间std
中查找。
std::max
函数仍然在名称空间std
中,它不在全局命名空间中。
您对max
的声明很好,因为您声明的是::max
,这是std::max
的一个单独实体。
当您进行非限定函数调用max
时,名称将在全局命名空间中查找,并在namespace std
中查找。
这两个查找的结果都会导致一个重载集,它由称为::max
和std::max
的所有函数签名组成。
然后重载解析为所提供的参数从重载集中选择最佳匹配,结果表明::max
是一个更好的匹配,因为非模板函数比函数模板更匹配,所有其他条件相同。
https://stackoverflow.com/questions/67315910
复制相似问题