meryngii.neta

今日も新たな"ネタ"を求めて。

参照におけるconstとvolatile

volatileは主に組み込みで使われる機能で、constと同じ場所に置けるのでcv-qualifierとまとめて呼ばれる。コンパイラによる読み出しの最適化を抑制する効果がある。
さて、「constを指すポインタ」と「constなポインタ」があるように、「volatileを指すポインタ」と「volatileなポインタ」がある。

const int* // constを指すポインタ
int* const // constなポインタ
volatile int* // volatileを指すポインタ
int* volatile // volatileなポインタ

これらは参照にもついてもいえる。

const int& // constを指す参照
int& const // constな参照
volatile int& // volatileを指す参照
int& volatile // volatileな参照

しかし、よく考えてみるとconstな参照は必要ない。もともと参照は書き換え不可能なので、constをつけるまでもないのだ。
volatileな参照はもしかしたら必要になるかもしれない。環境によっては、強引に参照先を変えることができるかもしれないからだ。
VC++ではこの二つに警告(C4227)を出すようだ。まあこの程度の扱いでいいのだろう。
http://msdn.microsoft.com/ja-jp/library/ydx93b5s(VS.80).aspx

const や volatile などの修飾子を C++ の参照と共に使用する方法は、現在ではあまり使われません。