エントリーの編集
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
一般的なalias問題 - gununuの日記
前々回、前回と strict aliasing rule について紹介しましたが今回は一般的なalias(別名)の問題について... 前々回、前回と strict aliasing rule について紹介しましたが今回は一般的なalias(別名)の問題について紹介します。 以下の関数は深刻な問題を抱えています。お分かりいただけるでしょうか。 // x*2 + x*2を計算し結果をyに格納する。 ただしxは十分に小さな値とする。 void calc(unsigned& y, const unsigned& x) { y = x*2; y += x*2; } コンパイラはソース通りにコードを生成するでしょう。しかしそれはプログラマが期待した仕様(コメントに書いてあるもの)とは異なります。 xとして1を入力すれば4が得られるとプログラマは期待しますが以下のように呼び出した場合は6が得られます。 unsigned i = 1; calc(i, i); // i == 6 つまりxとyは同じオブジェクトを指しておりaliasの関係