const
Brief​
When not to use const​
- When returning by value
- On member variables
On arguments passed by copy it is up to you, doesn't add much semantic, doesn't prevent big bugs but can prevent small ones.
Bonus trick​
You can use lambdas for const variables that are complex to initialize.
Bad :( (because x
is not const
)​
enum class MyEnum {
value0,
value1,
value2,
};
int do_something(MyEnum my_enum) {
int x;
switch(my_enum) {
case MyEnum::value0 :
x = 17;
break;
case MyEnum::value1 :
x = 5;
break;
case MyEnum::value2 :
x = 30;
break;
default:
x = 0;
break;
}
// use x
return x + 2;
}
int main() {
return do_something(MyEnum::value1);
}
Good :)​
enum class MyEnum {
value0,
value1,
value2,
};
int do_something(MyEnum my_enum) {
const int x = [my_enum]() {
switch(my_enum) {
case MyEnum::value0 :
return 17;
case MyEnum::value1 :
return 5;
case MyEnum::value2 :
return 30;
default:
return 0;
}
}(); // parenthesis to call the lambda function that was just declared
// use x
return x + 2;
}
int main() {
return do_something(MyEnum::value1);
}