为什么这段代码使用非合格的" std :: swap"函数编译?

时间:2014-05-18 14:14:03

标签: c++ std

在.cpp文件中,我实现了bubble_sort算法。在bubble_sort函数内部,我使用swap(a,b)。但是,我没有在此cpp文件中指定“using name space std”。 (实际上这个.cpp文件中没有标题)我仍然可以在没有任何警告或错误的情况下编译程序。我知道如果我想在bubble_sort函数中使用一些习惯函数,我需要在同一个文件中声明该函数。但我不明白为什么我不需要为交换做任何事情。下面是我的cpp文件:

bubble_sort.cpp

template <typename Type>
void bubble_sort(Type* originarray, int lengthofarray)
{
    int ii=lengthofarray-1;
    while(ii>0)
    {
        for (int jj=0;jj<ii;jj++)
        {
            if (originarray[jj]>originarray[jj+1])
                swap(originarray[jj],originarray[jj+1]);
        }
        ii--;
    }
}

1 个答案:

答案 0 :(得分:1)

首先,要正确测试模板代码(至少使用MSVC),您应该实例化

此外,如果您使用std命名空间中的某个类来尝试代码,编译器可以通过ADL (Koenig) lookup选择std::swap()