小编Mac*_*ski的帖子

在C++ 14中使用泛型lambda的奇怪编译器行为

我最近遇到了一个有趣的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的情况下编译器的输出 …

c++ gcc c++14

6
推荐指数
1
解决办法
129
查看次数

标签 统计

c++ ×1

c++14 ×1

gcc ×1