3

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

#include <iostream>
#include <vector>

int main() {
    std::vector<int> array(10);
    sort(array.begin(), array.end());
}

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

4

1 回答 1

7

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

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

于 2013-11-03T14:03:08.797 回答