2015-01-01から1年間の記事一覧

一般的なalias問題

C++

前々回、前回と strict aliasing rule について紹介しましたが今回は一般的なalias(別名)の問題について紹介します。 以下の関数は深刻な問題を抱えています。お分かりいただけるでしょうか。 // x*2 + x*2を計算し結果をyに格納する。 ただしxは十分に小さ…

strict aliasing rules, type punning解説 その2(union)

C++

前回述べた strict aliasing rules の集成体とunionのルールについては分かりずらいです。自身も誤解していた部分があったので追加で解説を試みます。このルールに該当するコードは以下のようものだと思っていましたが違うようです。 struct s { int i; }; s…

strict aliasing rules, type punning解説 その1

C++

strict aliasing rules つまり元の型のオブジェクトを別の型のオブジェクトとして使用すること(type punning)は基本的にできないというC/C++におけるルール。 つまり以下のようなことはできず、未定義動作を引き起こします。 float value = 0; int i = *(int…