2011-06-29 22 views
5

several assertions C89とC++ 03は厳密なエイリアシング規則を定義しています。私は、しかし、標準でその特定のビットを見つけることができません。私の理解は、C99では厳密なエイリアシング規則が追加されたということでした。C89またはC++ 03は厳密なエイリアシング規則を定義していますか?

+1

[別の質問への回答で]エイリアシングの有効な形式を列挙したC++ 03 3.10/15の全体を引用しました。(http://stackoverflow.com/questions/4807643/container-covariance-in -c/4807726#4807726)。 –

答えて

5

C++ 03標準は、§3.10 [basic.lval] p15下以下を有する:

プログラムが動作が未定義である次のいずれかのタイプ以外の左辺値を介してオブジェクトの格納された値にアクセスしようとする場合48)
- オブジェクトの動的な型、
- オブジェクトの動的な型のCV修飾バージョン、
- オブジェクトの動的な型に相当する符号付きまたは符号なしのタイプであるタイプ、
- オブジェクトの動的型のcv修飾バージョンに対応する符号付きまたは符号なしタイプであるタイプ
- メンバー間で前述のタイプの1つを含む集約型または共用体型(再帰的に、a
- オブジェクトの動的型の(おそらくcv修飾された)基本クラス型である型、
- char型またはunsigned char型。サブクエリまたは包含された共用体のメンバ。

脚注:

48)は、このリストの目的は、オブジェクトがまたはエイリアスされないことがあり得る、それらの状況を特定することである

This siteも、他の規格のセクションを記載している。

+0

質問であなたの答えを明示的に選んだので、これをチェックしてください。 –

5

このテキストはEXPRESSIONS§3.3、C89で存在する:

  • オブジェクトは は、以下のタイプの1つを有することのみ左辺値によってアクセスその格納された 値を持たなければなりませんオブジェクトの宣言された型、

  • 宣言されたオブジェクトの型 の修飾バージョン

  • 符号付きまたは符号なし 型がオブジェクトの
    宣言された型に対応しているタイプ、

  • 符号付きまたは符号なし タイプの
    修飾バージョンに対応しているタイプ宣言された型のオブジェクトの 、

  • は、上記
    のうちの1つを含むことを凝集または共用タイプ(再帰的に 、
    subaggregateまたは含まれる共用体のメンバを含む)、メンバー間のタイプ、または

  • 文字タイプ。制約は未定義の動作につながる「もの」、その許可エイリアシング規則のセットは、このテキストから導出することができるの

違反。

5

C89の3.3、C++ 03の3.10/15。

どちらの脚注にも、「このリストの目的は、オブジェクトにエイリアスが付いているかどうかを示すことです」という脚注があります。

+0

愚かなctrl-f! (私は "エイリアス"という単語を検索しました!正直!) –

関連する問題