好吧,所以这个程序是正确的,并且工作正常
#include <iostream>
using namespace std;
template <typename T>
void Swap(T &a , T &b);
int main(){
int i = 10;
int j = 20;
cout<<"i, j = " << i <<" , " <<j<<endl;
Swap(i,j);
cout<<"i, j = " << i <<" , " <<j<<endl;
}
template <typename T>
void Swap(T &a , T &b){
T temp;
temp = a ;
a = b;
b= temp;
}
但当我将功能名称从 交换 更改为 交换 时 它会产生一个错误
错误:调用重载'swap(int&amp;,int&amp;)'是不明确的注意: 候选人是:void swap(T&amp;,T&amp;)[with T = int] | || ===构建 完成:1个错误,0个警告=== |
发生了什么事情是使用模板以大写字母开头来启动函数的规则?
答案 0 :(得分:10)
这是因为已经存在一个名为swap
的函数。它实际上位于std
命名空间下,但因为您有using namespace std
行,所以它不存在std::
前缀。
正如您所看到的,使用using namespace std
并不总是一个好的选择,因为可能存在名称冲突,如本示例所示。一般情况下,我们不应该使用using
指令,除非有一个真正的原因 - 名称空间存在是有原因的 - 以防止名称冲突。