クラス A にメンバー変数 (参照ではなくオブジェクト) m があると仮定します。オブジェクト「o1」を定義したとき、式「o1.m」もオブジェクト型です。参照 'q1' を定義すると、式 'q1.m' も参照型になります。
その結論は正しいですか?それが本当なら、C ++標準ドキュメントに関係する句は何ですか?
クラス A にメンバー変数 (参照ではなくオブジェクト) m があると仮定します。オブジェクト「o1」を定義したとき、式「o1.m」もオブジェクト型です。参照 'q1' を定義すると、式 'q1.m' も参照型になります。
その結論は正しいですか?それが本当なら、C ++標準ドキュメントに関係する句は何ですか?
§5.2.5 ( N3797 C++14 DraftからのPostfix ExpressionsでのClass member access )を見てください。
postfix-expression.id-expression を E1.E2 と省略し、E1 をオブジェクト式と呼びます。E1.E2 の型と値カテゴリは次のように決定されます。5.2.5 の残りの部分では、cq は const または const がないことを表し、vq は volatile または volatile がないことを表します。cv は、3.9.3 で定義されているように、cv 修飾子の任意のセットを表します。
E2 が「T への参照」型を持つと宣言されている場合、E1.E2 は左辺値です。E1.E2 の型は T です。それ以外の場合は、次の規則のいずれかが適用されます。
- E2 が非静的データ メンバで、E1 の型が「cq1 vq1 X」で、E2 の型が「cq2 vq2 T」の場合、式は最初の式で指定されたオブジェクトの名前付きメンバを指定します。E1 が左辺値の場合、E1.E2 は左辺値です。それ以外の場合、E1.E2 は xvalue です。vq12 という表記は、 vq1 と vq2 の「結合」を表します。つまり、vq1 または vq2 が揮発性である場合、vq12 は揮発性です。同様に、表記 cq12 は cq1 と cq2 の「結合」を表します。つまり、cq1 または cq2 が const の場合、cq12 は const です。E2 が可変メンバーとして宣言されている場合、E1.E2 の型は「vq12 T」です。E2 が可変メンバーとして宣言されていない場合、E1.E2 の型は「cq12 vq12 T」です。
E1 が基準であっても、E2 が基準になることについて、規格は何も述べていません。明示的に言うと、E1 が参照型で E2 がそうでない場合、E1.E2 は参照型ではありません。