重複の可能性:
C++ 識別子でのアンダースコアの使用に関する規則は何ですか?
標準の関連セクション (もしあれば) に興味があります。
はい、アンダースコアの後に別のアンダースコアまたは大文字が続く場合 (つまり、プリプロセッサの #define またはマクロの場合)、または識別子がグローバル名前空間にある場合 (§17.6.4.3.2):
名前と関数シグネチャの特定のセットは、常に実装用に予約されています。
— 2 つのアンダースコア _ _ を含む名前、またはアンダースコアの後に大文字が続く名前 (2.12) は、実装用に予約されています。
— アンダースコアで始まる各名前は、グローバル名前空間で名前として使用するために実装に予約されています。
最初のポイントは、識別子のどこかに 2 つのアンダースコアが表示されている場合(中間または末尾であっても)、名前が予約されていることを意味することに注意してください。また、追加します(§17.6.4.3.5、強調鉱山):
アンダースコアで始まらないリテラル サフィックス識別子は、将来の標準化のために予約されています。
これらは予約済みではありませんfor
が、コンパイラ開発者が独自の関数に名前を付けるために使用する可能性があるため、使用しないでください。そのため、関数と競合する可能性があります。したがって、使用my_class::_function
してもエラーは発生しないはずですがvoid _function()
、1 つのコンパイラで重複を生成する可能性があるようなグローバル関数を記述します。