我最近遇到了一个有趣的GCC怪癖,当使用泛型lambda(C++ 14特性允许使用autolambda参数)时.似乎使用auto而不是type,会以某种方式影响"this"指针的捕获方式.我在以下示例中重现了问题:
#include <cstdio>
class A { private:
void method(int i) {
printf("Method Call %d",i);
}
public:
void publicMethod() {
auto lambda = [&] (const int k) { //problematic line
method(k); //problematic line
};
lambda(42);
} };
int main() {
A a;
a.publicMethod();
return 0; }
Run Code Online (Sandbox Code Playgroud)
上面的代码有效.当我将"有问题的行"更改为:
auto lambda = [&] (const auto k) { //problematic line
method(k); //problematic line
Run Code Online (Sandbox Code Playgroud)
它不再编译,但添加"this"指针:
auto lambda = [&] (const auto k) { //problematic line
this->method(k); //problematic line
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.我的问题是:这种行为有合理的理由吗?或者是GCC的非理性怪癖(也许应该报道)?
这是使用autowithout的情况下编译器的输出 …