よくわかんなくなるので。
宣言 | 実際の t の型 | 値が不変 | ポインタが不変 |
---|---|---|---|
const auto t = new T(); | T *const | × | 〇 |
const auto *t = new T(); | const T* | 〇 | × |
const auto *const t = new T(); | const T *const | 〇 | 〇 |
auto const t = new T(); | T *const | × | 〇 |
auto const *t = new T(); | const T* | 〇 | × |
auto *const t = new T(); | T *const | × | 〇 |
auto const *const t = new T(); | const T *const | 〇 | 〇 |
覚え方としては
- const auto が auto const に置き換えられる
- auto が T* ないし T に置き換えられる
- T const が const T に置き換えられる
で実際の型が決まったうえで、
- const のすぐ左にくるものが不変となる
- const が一番左のときはすぐ右にくるものが不変となる
で値やポインタが不変かどうかが分かる。
ようするに const auto って書かないで auto const って書くようにしてたほうがすんなり理解できるようになるんじゃないかな、たぶん