# UKAEA RSE Team Journal Club: 06/06/2024
:::info
- **Location:** Usual
- **Date:** 06/06/2024
- **Article Link:** https://quuxplusone.github.io/blog/2022/01/23/dont-const-all-the-things/
- **Agenda** *TODO*
1. Brief intro `2 min`
2. Discussion `43 min`
- **Participants:**
-
- **Host:** Chris
:::
## Brief Intro
Found blogpost through clang lints.
CM: A priori should use const wherever possible
Article says:
- Pass by const reference is good
- Pass by non-const reference is bad
- Suggests pass by pointer to make calling code clearer that object can be modified
## Discussion
### General
- JN: Following consistent conventions make code easier to read
- CM: Application across the board too restrictive
- KC: Common problem is unable to move out of const, Rust fixes this with borrow checker
- SP: Const should be on the right
### Struct member variables const
- Article discourages const member variables
- Const member variables prevents reassignment of member variables or instances of that class
- Article suggests "const" member variables should instead not have a setter
- HS: Use struct for data records and classes with getters/setters for "OOP" classes
- CM: Protecting mutability of variables via API is hard to manage for large classes
- CM: Big classes aren't assigned
### Local variables const
- JN: Too many keywords in C++ code, no performance benefit
- JP: Can prevent implicit move when return value optimization fails
### Const return value
- CM: generally no good reason to do this
- KC: exception code example: if ((a*b)=c) {}
- if operator* returns non const value this code which should have == compiles
- type needs to be implicitly convertable to bool
- Should be caught by compiler/linter
- from Scott Meyers Effective C++
### Consensus
- No real consensus
- C++ could be better