C++
volatile
- 変数を宣言するときにconstまたはvolatileというtype qualifierを付けることができて、まとめてcv-qualifiersと呼ぶ。constはよく使うがvolatileは使わないので、考えなくていい。
- 例えばある関数の中である変数が変更されていないとき、コード上で繰り返し変数を読むように書かれていても、コンパイラは最初に一度だけ読むように最適化することがある。しかし、組み込みやデバイスドライバの実装においては、その変数のアドレスに直接アクセスして状態を更新している場合があって、そのような最適化が行われることは不都合である。そのようなときにvolatileというtype qualifierを使う。よって特にそのような事態になったときのみ思い出せばいい機能である。
- メンバ関数をcv-qualifyすることもできる。これについても、constは頻繁に使われるがvolatileは使われない。どちらにせよ変数*thisに対して作用する。また、関数の型の部分である。
- 要するに、volatileについて考える必要はなく、cv qualifierと言われたらconstだと思っておけばいい。
- コンパイラが最適化しない場合とアセンブリを比較するようなときに便利だという人もいる。
casting
- C++では、4種類のキャスト?が定義されている。
- static_cast
- ほとんどの場合これを使う。
- dynamic_cast
- 子孫クラスの型にしたいとき使う。実行時に正当性が判定される。
- const_cast
- constを外すときに使う。普通はやるべきでないことなので、必要ない。
- reinterpret_cast
- 自由に型を変えたいときに使う。まず必要ない。
- static_cast
- C言語のキャストの構文を使わずにこれらのみ使うべきだとされる。これらのキャストは、C言語の構文では明示的でなかった、キャストする意図を表す意義があるのだと言われる。
- C++で、functional cast expressionというものが導入された。これによって例えば
(unsigned)x
をunsigned(x)
と書ける。どちらにせよC言語のスタイルのキャストであって使うべきではないらしい。static_castを使えばいいらしい。