STL中的自由功能需要名称空间吗?

2 c++ stl c++11

我正在玩我的编码风格.我曾经明确地为每个库调用添加前缀,std::但我转而使用这样的声明:

using std::count;
using std::vector;
Run Code Online (Sandbox Code Playgroud)

我在过去几天注意到的一件事是,有时如果我忘记了使用声明 - 这using std::vector;是一个很好的例子 - 我会得到大量的编译器错误.但是,如果我忽略了命名空间delcare,那么像using std::count;我的代码编译算法就好了.

这是否与类和自由函数的区别有关?在所有参考部位,两者count(first, last, value)vector带有前缀std::,所以我希望他们有同样的表现.

或者它与全局命名空间中的其他函数有关吗?我注意到std::max似乎也需要一个名称空间声明,也许它在默认包含的Apple/glibc/LLVM文件中定义,因此如果我使用它没有名称空间声明会有冲突吗?

我正在使用Apple LLVM 7.0.2.在El Capitan.

编辑:向我们展示代码

#include <algorithm>
#include <vector>

using std::count;
using std::vector;

int main() {
    vector<int> v = { 1, 2, 3, 4 };
    return count(begin(v), end(v), 3);
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 5

正如TC(差不多)所说,神奇的咒语是ADL,它代表"依赖于参数的查找".当使用其名称在命名空间中定义的参数调用函数时,编译器会在同一名称空间中查找该函数.做,感觉,对吗?