Does [=] imply that all local variables will be copied?

前端 未结 2 567
温柔的废话
温柔的废话 2021-02-04 23:07

When I write a lambda with [=], does it mean that all my local variables will be copied into members of the created struct or can I assume that only those will that

2条回答
  •  臣服心动
    2021-02-04 23:59

    No. It just means that all local variables from the ambient scope are available for lookup inside the body of the lambda. Only if you refer to a name of an ambient local variable will that variable be captured, and it'll be captured by value.

    The "capture anything" shorthands = and & are just syntactic sugar, essentially, telling the compiler to "figure out what I mean".


    A formal reference from 5.1.2/11-12:

    If a lambda-expression has an associated capture-default and its compound-statement odr-uses [...] a variable with automatic storage duration and the odr-used entity is not explicitly captured, then the odr-used entity is said to be implicitly captured [...]

    An entity is captured if it is captured explicitly or implicitly.

    Note that "capture-default" refers to [=] and [&]. To repeat, specifying a capture-default doesn't capture anything; only odr-using a variable does.

提交回复
热议问题