编写这样的代码时
std::vector<int> test;
std::find(test.begin(), test.end(), 5);
我的IDE(带有Resharper插件的Microsoft Visual Studio 2017)告诉我第二行的命名空间限定符是多余的,代码可以像这样重写:
std::vector<int> test;
find(test.begin(), test.end(), 5);
它编译得很好。请注意,我绝不会使用using namespace std
或using std::find
。这不仅适用于std命名空间,我在其他场合也见过它。
如果没有使用using
,在哪种情况下省略了允许的命名空间限定符?语言标准中的定义是什么,它的基本原理是什么?
经过一些测试我的假设是,如果函数的一个参数与函数位于同一个命名空间中,函数的命名空间会自动推断,但我想看一些官方参考。