Ami*_* A. 4 c++ namespaces std
算法头文件中不是已经有max函数了吗?和 by 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;
}
Run Code Online (Sandbox Code Playgroud)
通过
using namespace std我将函数导入到全局命名空间
这是一个普遍的误解。没有什么是进口的。事实上,将指令using namespace std;放在全局命名空间中意味着在全局命名空间中查找名称时,也会在 namespace 中查找该名称std。
该std::max函数仍在命名空间中std,不在全局命名空间中。
您的声明max很好,因为您声明::max哪个是std::max.
当您进行不合格的函数调用时 max,名称会在全局命名空间中查找,也在namespace std.
这两个查找的结果导致一个重载集,其中包含所有调用函数的签名::max和std::max。
然后重载决议从重载集中为提供的参数选择最佳匹配,结果证明这::max是更好的匹配,因为非模板函数比函数模板更好匹配,所有其他条件都相同。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |