7

OK、私は経験豊富な C++ プログラマーではありませんが、次のコンストラクターの引数にあるアンダースコアの意味は何だろうと思っていました。

class floatCoords
 {
 public:
  floatCoords(float _x, float _y, float _width, float _height)
   : x(_x), y(_y), width(_width), height(_height)
  {

  }
  float x, y, width, height;
  ...
4

8 に答える 8

9

特にない。彼は、メンバー変数とパラメーター名を区別するために、そのように名前を付けただけです。

アンダースコアは、C++ 識別子で有効な文字です。

于 2009-10-19T21:21:03.867 に答える
8

これは単なる便利な命名規則であり、言語にとっては何の意味もありません。大文字を続けないように注意してください: C で二重アンダースコア ( __const) はどういう意味ですか?

于 2009-10-19T21:22:11.263 に答える
8

ほとんどの場合、コードの作成者は、初期化子リスト内のデータ メンバー名とコンストラクター パラメーター名の間の潜在的な競合を回避しようとしました。おそらく、作成者は、C++ ルックアップ ルールによって競合が発生しないことが保証されているという事実を認識していませんでした。つまり、次のコードでも期待される結果が得られます

class floatCoords    {
    public:
        floatCoords(float x, float y, float width, float height)
                : x(x), y(y), width(width), height(height)
        {
        }
        float x, y, width, height;
        ...

準備ができていない読者にとっては混乱を招くかもしれませんが.

もちろん、コンストラクターの本体内では、パラメーター名によってメンバー名が隠されるためthis->...、データ メンバーにアクセスするには修飾名を使用する必要があります。コードの作成者もそれを回避しようとしていた可能性があります。

于 2009-10-19T21:24:05.017 に答える
2

これらは、さまざまな人/機関が想定している変数の命名規則にすぎません。これは一見不必要に思えるかもしれませんが、コードを読み書きするとき、特に同じ名前のパラメーターとメンバー変数がある場合に、実際には非常に便利です。たとえば、一般的に次の 3 つのケースが考えられます。

class A {
  void foo(int age_) { //parameter
    int age = 18; //local scope
    if (age_ > age) cout << legal << endl;
  }
  int _age; //member
};

上記の例では:

  • _variable - これがクラス メンバー変数であることを意味します
  • variable_ - これが関数へのパラメーターであることを意味します
  • variable - これは、関数スコープに対してローカルな通常の変数であることを意味します
于 2009-10-19T21:27:44.493 に答える
1

それらは、渡されたパラメーターの単なる名前です。メンバー変数と一致し、初期化子に使用されます。

特別な意味はありません。一部の人が使用する慣習にすぎません。

于 2009-10-19T21:20:54.717 に答える
0

構文上の意味はありません。ただし、多数のフィールド ( xywidth、および などheight) がある場合は、フィールド名と先頭のアンダースコアを使用して、それらを初期化するコンストラクター パラメーターに名前を付けるのが一般的な規則です。

于 2009-10-19T21:21:29.467 に答える
0

float _xこれらのアンダースコアの目的は、パラメーター変数とメンバー変数を区別することですfloat x。構文的には、アンダースコアによる特別な意味はありません。個人的には、C++ をコーディングする必要がある場合は、すべてのパラメーターにa_ プレフィックスを付け、すべてのメンバー変数にプレフィックスを付けることを好みます。m_

したがって、ローカル変数、メンバー変数、およびパラメーター変数を組み合わせて一致させる必要がある状況に陥った場合、どの変数を扱っているかがわかります。

int y = a_x * 2;
m_x = y + 3;
于 2009-10-19T21:21:42.250 に答える
0

den float x、float yなどの名前を付けると、クラスの実際のフィールドには同じ名前が付けられているため、アクセスできなくなるためです。

それは言語とは何の関係もありません。それは実際のプログラマーによる単なる慣例です(コードをより明確にするためだと思います)

于 2009-10-19T21:24:28.043 に答える