Je suis de la team "const autant que possible". Donc, dès que je vois une déclaration de variable à laquelle je peux ajouter const, je le fais.
Je fais une exception à cette règle : quand je stocke une lambda expression, je n'ajoute jamais const. Je fais auto foo = []() {}; et non const auto foo = []() {};.
Pourtant, en suivant la logique "const autant que possible", je devrais aussi utiliser const dans cette situation.
Comment faites-vous ? auto ou const auto pour les lambdas ? Pourquoi ?
PS : pour celles et ceux qui ne savent pas, on ne peut changer la valeur de la variable :
Code : | Sélectionner tout |
1 2 3 4 | int main() { auto f = []() {}; f = []() {}; } |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | <source>:3:7: error: no viable overloaded '=' 3 | f = []() {}; | ~ ^ ~~~~~~~ <source>:2:14: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from '(lambda at <source>:3:9)' to 'const (lambda at <source>:2:14)' for 1st argument 2 | auto f = []() {}; | ^ 1 error generated. Compiler returned: 1 |
Code : | Sélectionner tout |
1 2 3 4 5 | int main() { auto f = []() {}; auto g = f; f = g; } |
Code : | Sélectionner tout |
1 2 3 4 5 6 | <source>:4:6: error: object of type '(lambda at <source>:2:14)' cannot be assigned because its copy assignment operator is implicitly deleted 4 | f = g; | ^ <source>:2:14: note: lambda expression begins here 2 | auto f = []() {}; | ^ |