好吧,这样的程序和工作绝对正确
#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;
}
Run Code Online (Sandbox Code Playgroud)
但是当我将函数的名称从Swap更改为swap时 会产生错误说明
错误:重载'swap(int&,int&)'的调用是不明确的 注意:候选者是:void swap(T&,T&)[与T = int] | || ===构建完成:1个错误,0个警告=== |
发生了什么事情是使用模板以大写字母开头来启动函数的规则?
zxc*_*cdw 10
这是因为已经存在一个名为的函数swap.它实际上在std命名空间下,但因为你有using namespace std一行,所以它没有std::前缀.
如您所见,using namespace std由于可能的名称冲突,使用它并不总是一个好的选择,如本例所示.一般情况下,我们不应该使用该using指令,除非有一个真正的原因 - 名称空间存在是有原因的 - 以防止名称冲突.