10

This was originally part of this question:

Passing lambda declared using auto-keyword by non-const reference as argument to std::function parameter type

but I decided to make it a separate one.

In what circumstances is it better/more idiomatic to pass a lambda or other function object by reference or value?

Community
  • 1
  • 1
Jeet
  • 38,594
  • 7
  • 49
  • 56

1 Answers1

14

You use the same rules for "lambda"s that you would for any object that you take as a parameter.

A function should use non-const reference if the intent of the function is to modify the object for the caller. The function should use const& if it is just using the object without changing it. And it should pass by value if it is going to copy/move the object into its internal storage.

Nicol Bolas
  • 449,505
  • 63
  • 781
  • 982
  • 3
    I remember reading in some comment on this forum that it was idiomatic to pass functors by value, and hence this question. I guess if there is a danger of the functor being passed going out of scope, then a by-value idiom is better. – Jeet Apr 13 '13 at 21:52
  • 1
    If I pass a lambda by non-const reference, I can modify it. But what does "modify a lambda" mean? – Ignorant Sep 04 '17 at 10:02