gpt4 book ai didi

c++ - 为什么 std::generate 可以在没有命名空间限定符的情况下访问?

转载 作者:可可西里 更新时间:2023-11-01 16:42:10 25 4
gpt4 key购买 nike

这样编译正常正常吗?

#include <vector>
#include <algorithm>

int main()
{
std::vector<int> buf;
generate(buf.begin(), buf.end(), []{ return 0; });
}

(注意 generate() 前面缺少的 std::)

是否在某处记录了此行为?还是我偶然发现了编译器或库错误?在我的例子中,Linux 上的 GCC 5.3.0 和 Clang 3.8.0;两者都使用 libstdc++,所以可能是库错误?

最佳答案

这是允许的,主要是因为 generate 的参数在 std 中。

代码如下

namespace Foo
{
struct B{};
void foo(const B&);
}

int main()
{
Foo::B b; /*Requires Foo::*/
foo(b); /*Does not require Foo:: as that is gleaned from the argument*/
}

出于类似的原因是可以接受的。我们称之为参数相关查找。参见 https://en.wikipedia.org/wiki/Argument-dependent_name_lookup

关于c++ - 为什么 std::generate 可以在没有命名空间限定符的情况下访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36406102/

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