C ++でのオブジェクトの動的配列に対する私の答えから、そしてC ++識別子でアンダースコアを使用することについてのルールは何ですか?:どうやら、大文字で始まり、_
その後に大文字が続く名前は、グローバル名前空間で予約されています。
17.4.3.2.1グローバル名[
lib.global.names
]名前と関数シグネチャの特定のセットは、常に実装用に予約されています。
__
二重下線( )を含む、または下線で始まり、その後に大文字(2.11)が続く各名前は、あらゆる用途のために実装用に予約されています。- アンダースコアで始まる各名前は、グローバル名前空間で名前として使用するために実装に予約されています。165
165)このような名前は、名前空間
::std
(17.4.3.1)でも予約されています。
最初の質問に対する私の答えでは、私はこのようなクラスを持っていました
class A
{
private:
vector<int> _Ints;
}
コメントでは、_Ints
識別子は予約済みの名前であるため、未定義の動作を呼び出すと言われました。ただし、標準の最近のドラフトによれば、メンバー変数の名前検索は、次のルールを使用して行われます。
3.4.3.1クラスメンバー[
class.qual
]修飾IDのネストされた名前指定子がクラスを指定する場合、以下にリストされている場合を除いて、ネストされた名前指定子の後に指定された名前がクラス(10.2)のスコープで検索されます。名前は、そのクラスまたはその基本クラスの1つの1つ以上のメンバーを表すものとします。
私にとって、これは、スコープがクラスであるため、メンバー変数をグローバル名前空間の一部にすることはできないことを意味します。
そして今、質問:
メンバー変数はグローバル名前空間にないため、実装の予約名の規則に違反することは決してないという私の理解は正しいですか?私が正しくない場合、誰かが私のルックアップルールの誤解を説明できますか?