参照における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