gpt4 book ai didi

c++ - 从 lambda 调用函数时的查找规则是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:33 24 4
gpt4 key购买 nike

下面的例子演示了我在VC++ 2010中遇到的问题:

class Foo
{
template<class T>
static T foo(T t) { return t; }

public:
void test()
{
auto lambda = []() { return foo(1); }; // call to Foo::foo<int>
lambda();
}
};

VC++ 产生:error C3861: 'foo': identifier not found

如果我限定对 foo 的调用:Foo::foo(1); 那么这个例子编译时会出现警告:警告 C4573:'Foo::foo' 的使用要求编译器捕获 'this' 但当前默认捕获模式不允许它

关于这个案例,标准是怎么说的?是否应该找到不合格的名称?限定名称是否需要捕获 this

最佳答案

Microsoft 已经在许多案例中看到了此问题的报告。见:

Scope Resolution with lambdas interferes with namespace and type resolution

Template resolution in lambdas

如您所知,显式解析允许它找到名称。关于这个还有一个额外的警告,这也是一个编译器错误(名称解析不需要访问它,尽管我可以看到编译器实现可能需要它) - 虽然它是一个单独的错误。 Microsoft 已经确认这是一个错误,并且显然已经为下一个版本准备了修复。

关于c++ - 从 lambda 调用函数时的查找规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7280673/

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