6

私は C# から C++ に来ていますが、const-correctness はまだ初めてです。C# では、次のようにプロパティを宣言できます。

class Type 
{
    public readonly int x;
    public Type(int y) 
    {
        x = y;
    }
}

これにより、 x が初期化中にのみ設定されることが保証されます。C++で同様のことをしたいと思います。私が思いつくことができる最高のものは次のとおりです。

class Type
{
private:
    int _x;
public:
    Type(int y) { _x = y; }
    int get_x() { return _x; }
};

これを行うより良い方法はありますか?さらに良い: 構造体でこれを行うことはできますか? 私が考えている型は、実際にはロジックのない単なるデータのコレクションであるため、値が初期化中にのみ設定されることを保証できれば、構造体の方が適しています。

4

3 に答える 3

8

const修飾子があります:

class Type
{
private:
   const int _x;
   int j;

public:
    Type(int y):_x(y) { j = 5; }
    int get_x() { return _x; }
    // disable changing the object through assignment
    Type& operator=(const Type&) = delete;
};

コンストラクターの初期化リストで定数を初期化する必要があることに注意してください。コンストラクタ本体で初期化できる他の変数も。

2 番目の質問については、はい、次のようなことができます。

   struct Type
   {
      const int x; 
      const int y;

      Type(int vx, int vy): x(vx), y(vy){}
      // disable changing the object through assignment
      Type& operator=(const Type&) = delete;
   };
于 2013-09-12T22:44:29.377 に答える