|
#define BUFSIZE 1000#defineの場合「型」が定かでない。C++は型にうるさい言語であるため、定数であっても型を持つことが望ましい。
const size_t BUFSIZE=1000;constで定義したBUFSIZEは、#defineで定義したBUFSIZEとは違って変数である。
const 任意の型 &func();この場合、返却値が参照の場合、参照を得ても左辺値になることが出来ない。
int i;この場合、func.hoge()で参照を得ても、左辺値に出来ない。
const int &hoge() { return i; }
func.hoge() = 0; // 不可左辺値にすると、コンパイルエラーが発生する。
class Hoge {ここで次のような(誤った)使い方をするとエラーとなる。
public:
...
// 敢えてconstの値を返す
const Hoge operator+(const Hoge &rhs) const { return ...; }
};
Hoge a, b, c;本来は「a + b == c」のつもりだったが、誤って=と書いてしまった例である。しかし、constのおかげでコンパイルエラーとなり、バグの混入を避けることができた。
...
if (a + b = c) {
...
}
int hoge() const { ... };constで定義された関数内でメンバー変数の変更をすると、コンパイルエラーが発生する。但し、mutableで修飾したメンバー変数だけは、constであっても例外的に書き換えができる。