gpt4 book ai didi

c++ - 为什么 for_each 可以在没有 std::prefix 的情况下工作

转载 作者:IT老高 更新时间:2023-10-28 23:16:43 26 4
gpt4 key购买 nike

我认为 for_each 是在标准命名空间中定义的,但这段代码实际上是使用以下编译器标志编译和运行的。谁能解释一下为什么?

  //@filename myprog.cpp 
//g++-4.5 --std=c++0x myprog.cpp

#include<iostream>
#include<algorithm>

int main()
{
std::vector<int> v{1,2,3,4,5};
std::cout<<"printing the number\n";
for_each(v.begin(),v.end(),[](int num) {//no std::for_each
std::cout<<num<<"\t";
});
return 0;
}

最佳答案

将评论转换为答案,其原因是 ADL(参数相关查找)。基本上,这意味着无法找到适合 for_each 的匹配项。在当前命名空间中,编译器有一个内置规则,即现在查看其他命名空间 - 它用于此的命名空间集是参数的命名空间。一旦有了一组命名空间,它就会搜索它们以找到合适的for_each。 .

悬而未决的问题是 std::vector<>::iterator居住在 std::或不。显然在您的实现中确实如此,这就是为什么适当的 for_eachstd::被发现。 可能有种情况,该迭代器不在 std:: 中。 - 为了安全起见(正如 Alan 的评论),请始终养成使用 std:: 进行排位赛的习惯.

这也防止了其他人介绍另一个 for_each 的情况。 (为了争论)进入你的命名空间 - 这可能会破坏事情(在更糟糕的情况下 - 静默接受 - 但在运行时中断)。

关于c++ - 为什么 for_each 可以在没有 std::prefix 的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6730266/

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