ポインタよりも参照を使おう
あんまり関係の無い所
int& a
とint &a
のどちらで書くでしょうか?
私はint &a
の方で書きます。
// int i; // int *ip; // int *const ipc = &i; // int &ir = i; int i, *ip, *const ipc = &i, &ir = i; // const int ci = 0; // const int *cip; // const int *const cipc = nullptr; // const int &cir = i; const int ci = 0, *cip, *const cipc = nullptr, &cir = i; // int constでも良い
上記の様に最初のint
と&
の関連性が低い為です。
int a = 0; // 間違えそう! // int &b = a; // int c = a; int& b = a, c = a;
特性に注目する
int main(){ int i, *ip, *const ipc = &i, &ir = i; const int ci = 0, *cip, *const cipc = nullptr, &cir = i; // mutable i = 0; ip = &i; cip = &i; // writeable *ip = 0; *ipc = 0; ir = 0; }
mutableな変数は自身の値を再代入できます。
writeableな変数は他の変数の値を書き換える事ができます。
ここで紛らわしいのがi
とci
です。
i
がmutableなばかりに先頭にconst
を付けた場合、変数の変更ができないように考えてしまいます。
先頭にconst
を付ける事によってwriteableでは無くなり、*const
を付ける事によってmutableでは無くなると考えると分かりやすいです。
参照は分かりやすい
この特性で参照を考えると参照は非常に分かりやすいです。
参照はmutableではありません。
int &ir
はwriteableです。
const int &cir
はwriteableではありません。
分かりやすい!