为什么这段代码使用非限定"std::swap"函数编译?

Why does this code using non-qualified "std::swap" function compile?

本文关键字:std swap 编译 函数 段代码 代码 为什么      更新时间:2023-10-16

在.cpp文件中,我实现了一个bubble_sort算法。在bubble_sort函数中,我使用swap(a, b)。但是我没有在这个cpp文件中指定"使用名称空间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--;
    }
}

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

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