使用Lambdas时,通过捕获子句或通过作为参数传递值是否更高效?

时间:2016-01-28 12:01:21

标签: c++ lambda

这个问题刚出现在我脑海中,我真的不知道如何解决这个问题。

让我告诉你我的意思:

int x = 1;

auto lambda1 = [x](){

 // do something with x, not specified here though
}

auto lambda2 = [](int x){

  // do something with x, not specified here though
}

lambda1();
lambda2(x);

假设我们在给定时间只有lambda1或lambda2。

在这种情况下哪个功能会更快?我很确定差异很小,如果有任何差别,但这只是引起了我的兴趣,我真的很想知道!

如果我们只使用一个int,这可能是非常愚蠢的,但是在更大的缩放lambda中可能存在可测量的差异。

1 个答案:

答案 0 :(得分:3)

第一个转换为

struct _ {
    int x;
    _(int x_): x(x_) {}
    void operator()() const {...}
};

第二个转换为

struct _ {
    _() = default;
    void operator()(int x) const {...}
};

前者可能会在闭包施工现场周围产生各种影响*,后者可能会在闭合呼叫站点周围产生相同的效果。

* - 取决于