gpt4 book ai didi

c++ - STL 中的自由函数是否需要 namespace ?

转载 作者:搜寻专家 更新时间:2023-10-31 00:31:02 26 4
gpt4 key购买 nike

我正在研究我的编码风格。我过去常常用 std:: 明确地为每个库调用添加前缀,但我正在切换到使用这样的声明:

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

过去几天我注意到的一件事是,有时如果我忘记了 using 声明——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);
}

最佳答案

作为 T.C. (几乎)说,神奇的咒语是ADL,它代表“argument-dependent lookup”。当使用其类型在命名空间中定义的参数调用函数时,编译器会在同一命名空间中查找该函数。有道理,对吧?

关于c++ - STL 中的自由函数是否需要 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35094841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com