为什么这段代码使用非限定"std::swap"函数编译?
Why does this code using non-qualified "std::swap" function compile?
在.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()
。
相关文章:
- a,b = b,a in python vs std::swap() in C++
- 使用 std::swap 禁用 ADL
- 如何使用 std::swap with array?
- 智能指针的 std::swap 是否保证引用保持不变?
- "std::swap"应用于这些对象时会做什么?
- 为什么 std::swap 不使用 swap 习语?
- 为什么有这么多std::swap的专业化
- 为什么使用std::swap不会在外部范围中隐藏其他交换函数
- 在结构C++中使用 std::swap 与 std::vector
- 为什么 std::swap 不适用于地址运算符
- std::swap vs std::exchange vs swap operator
- 使用静态tmp变量为简单类型C++重新实现std::swap()
- 使用 GCC 4.8 编译时无法对向量执行 std::swap
- 可以将"using std::swap;"放在标题中吗?
- "using std::swap"如何启用 ADL?
- std::swap 在 VS 2013 中导致无限递归
- 为什么不是 std::swap 在全局命名空间中
- std::swap(*(void **)x, *(void **)y)y是什么意思
- 在向量之间使用 std::swap 或 vector::swap
- 为什么 std::swap 不适用于模板项