この会議で、Scott Meyersは、「左辺値は一般に、アドレスを取ることができる式です」と言うことから始めます。私は一般的にその言葉を強調しています:あなたがアドレスを取ることができない左辺値は何ですか?(存在する場合)。
編集:あなたの答えをコードスニペットに提供してください、それは物事をより明確にします。
ビットフィールドはあなたの条件を満たすと思います...私f.x
は左辺値だと思いますが、あなたはそれのアドレスを取ることができません。興味深いことに、あなたもできませんauto & x = f.x
。
C ++ 11セクション8.3.1段落4の一部:ビットフィールド(9.6)のアドレスを取得できないため、ポインタがビットフィールドを指すことはありません。
struct foo {
int x : 3;
int y : 3;
int z : 3;
};
int main() {
foo f;
f.x = 3;
}
この他のアイデアについてはさらに確信が持てませんが、標準では、main関数の使用は許可されていないとされています。mainのアドレスを取ることがそれを使用している場合は、それでも十分です。C ++113.6.1段落5。
そして、私が残したコメントから、TIはCおよびC ++コンパイラを拡張してcregister
、アドレスを取得できないというストレージクラスが存在することを知っています。(アドレスの概念を持たない物理レジスターを参照しているため)。
名前付きシンボルからアドレスを取得できます (例: 対一時インスタンス)。私がこの説明を理解している限り、それが左辺値を構成しているものです。