STL 中的自由函数是否需要命名空间
Are name spaces required for free functions in the STL?
我正在玩我的编码风格。 我曾经在每个库调用前面显式地加上 std::
但我正在切换到使用这样的声明:
using std::count;
using std::vector;
在过去的几天里,我注意到的一件事是,有时如果我忘记了使用声明(using std::vector;
是一个很好的例子),我会收到大量的编译器错误。 但是,如果我忽略了命名空间 delcare,则using std::count;
我的代码编译得很好的算法。
这与类和自由函数的区别有关吗? 在所有参考站点上,count(first, last, value)
和 vector
都以 std::
为前缀,因此我希望它们的行为相同。
还是与全局命名空间中的其他函数有关? 我注意到std::max
似乎还需要命名空间声明,也许它是在默认包含的 Apple/glibc/LLVM 文件中定义的,因此如果我使用它没有命名空间声明,就会发生冲突?
我在El Capitan上使用Apple LLVM 7.0.2。
编辑:向我们展示代码
#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);
}
正如T.C.(几乎)所说,魔法咒语是ADL,代表"依赖于参数的查找"。当使用类型在命名空间中定义的参数调用函数时,编译器会在同一命名空间中查找该函数。有道理,对吧?
相关文章:
- 是否可以将函数导入命名空间,但不能导出它?
- VS2017 是否更改了 C++ 中访问 C# 命名空间的方式?
- C++ - 是否将常量幻数放入命名空间
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- 是否将命名空间范围文件本地 (.cpp) 常量放在匿名命名空间中
- c++ 内联友元函数是否会导致命名空间之间的名称隐藏?
- 将以"_[a-z0-9]"开头和"using"的标识符导入全局命名空间是否定义良
- 是否可以在相同的命名空间中,但在不同的嵌套项目中定义具有相同名称的类
- 是否可以在 c ++ 中查看命名空间的所有内容?
- 是否有 GCC 警告,用于使用 C 库中的符号而不是通过命名空间 std?
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- 使用显式命名空间限定符时模板实例化行为是否发生变化?
- 调用 ADL 时,表达式和命名空间之间是否会发生冲突
- winrt 命名空间是否具有控制台函数?
- 一个命名空间是否可以是另一个命名空间的成员
- 命名空间是否可以用作C++中的对象模板
- 在匿名命名空间中使用命名空间是否安全
- 隐藏第三方命名空间是否危险
- C++:当前命名空间是否覆盖其他命名空间
- c ++命名空间是否有类似".."?