1. ホーム
  2. c++

[解決済み] C++のクラスでメンバ変数に接頭辞を使用する理由

2022-04-23 07:57:05

質問

C++のコードの多くは、メンバ変数をマークアップするための構文上の規約を使用しています。一般的な例としては、以下のようなものがあります。

  • m_ メンバー名 パブリックメンバの場合 (パブリックメンバが使用される場合)
  • メンバー名 プライベートメンバーまたは全メンバーの場合

また、this->.を使って強制しようとする人もいます。 メンバー メンバー変数が使用されるたびに

私の経験では、ほとんどの大規模なコードベースでは、このようなルールを一貫して適用することに失敗しています。

他の言語では、このような慣例ははるかに普及していません。私は、JavaやC#のコードでたまに見かける程度です。RubyやPythonのコードでは見たことがないような気がします。このように、最近の言語では、メンバ変数に特別なマークアップを使わない傾向があるようです。

C++ではこの慣習は今でも有用なのでしょうか、それとも単なる時代錯誤なのでしょうか。特に、ライブラリ間で非常に一貫性のない使われ方をしているからです。他の言語では、メンバープレフィックスがなくても大丈夫だということが証明されているのではないでしょうか?

どうすればいい?

先頭のアンダースコアの使い方に注意が必要です。 単語中の大文字の前のアンダースコアは予約されています。 例えば

_Foo

_L

はすべて予約語ですが

_foo

_l

は不可。 他にも、小文字の前にアンダースコアを付けることができない場合があります。 私の場合、Visual C++ 2005でたまたま_Lが予約されており、その衝突によって予期せぬ結果がもたらされることがわかりました。

ローカル変数をマークアップすることがどれだけ有用か、私は迷っています。

どの識別子が予約されているかについてのリンクはこちらです。 C++の識別子でアンダースコアを使用する場合のルールについて教えてください。