为什么在全局命名空间中有一个sort函数?

Suk*_*lay 3 c++ c++-standard-library

为什么C++中的全局命名空间中有一个sort函数?为什么这段代码会编译?

#include <iostream>
#include <vector>

int main() {
    std::vector<int> array(10);
    sort(array.begin(), array.end());
}
Run Code Online (Sandbox Code Playgroud)

PS:clang ++ --std = c ++ 11 --stdlib = libc ++ ./test.cpp

Ste*_*sop 6

sort它不在全局命名空间中,而是在std.但是,结果类型vector::begin() 也可能是std(这取决于实现).如果std::sort是,则由ADL(参数依赖查找)找到.

如果您不想std::sort被ADL找到,那么您可以拨打合格的电话sort而不是不合格的电话:::sort(array.begin(), array.end()).

  • 顺便说一句:这似乎是对ADL的一个很好的描述:http://en.cppreference.com/w/cpp/language/adl (2认同)
  • @SukhanovNiсkolay如果你的排序在全局命名空间中,你可以用`:: sort(args);`来调用它.但我建议你把它放在你自己的命名空间中. (2认同)
  • @SukhanovNiсkolay好点.它必须由你的两个包括任何一个引入.当然,你不能依赖它,这是这个实现的一个特点. (2认同)
  • @kerreksb不是真的.esp在调试中,添加UB检查是值得的.在发布中,略微少于裸指针为调试提供了更一致的编译结果. (2认同)