5

好的,所以程序和工作绝对正确

#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更改为swap 时,它会生成一个错误消息

错误:重载 'swap(int&, int&)' 的调用不明确| 注意:候选人是: void swap(T&, T&) [with T = int]| ||=== 构建完成:1 个错误,0 个警告 ===|

发生了什么是规则使用模板以大写字母开头的函数?

4

1 回答 1

11

这是因为已经存在一个名为swap. 它实际上是在std命名空间下,但是因为你有using namespace std一行,所以它没有std::前缀就存在。

如您所见,使用using namespace std并不总是一个好的选择,因为可能会发生名称冲突,如本例所示。using一般来说,除非有真正的原因——命名空间的存在是有原因的——以防止名称冲突,否则不应使用该指令。

于 2012-11-10T16:07:09.500 回答