Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果我将函数命名为“swap”,但“swap”可以,为什么会出现模板错误?_C++_Templates - Fatal编程技术网

C++ 如果我将函数命名为“swap”,但“swap”可以,为什么会出现模板错误?

C++ 如果我将函数命名为“swap”,但“swap”可以,为什么会出现模板错误?,c++,templates,C++,Templates,好的,这是程序,工作完全正确 #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; S

好的,这是程序,工作完全正确

#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;
}
#包括
使用名称空间std;
模板
无效掉期(T&a、T&b);
int main(){
int i=10;
int j=20;

cout这是因为已经存在一个名为
swap
的函数。它实际上位于
std
命名空间下,但由于您有一个
using namespace std
行,因此它不存在
std::
前缀


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

是否模板化函数名应该以大写字母开头?我之所以这样问,是因为我不知道,而不是因为我不同意。不过,例如,标准库也使用小写命名约定,所以我很快就想不出这种命名方案有什么好处。:)