auto ou const auto pour les lambdas ?
Bonjour
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.
:arrow: 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:
1 2 3 4
| int main() {
auto f = []() {};
f = []() {};
} |
Code:
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 |
EDIT : on peut produire un exemple où le typage correspond et où l'affectation est quand même rejetée (de toute façon, c'est pas un cas très utile) :
Code:
1 2 3 4 5
| int main() {
auto f = []() {};
auto g = f;
f = g;
} |
Code:
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 = []() {};
| ^ |