4

次のように定義されたクラスメンバーがあります。

someType* X;

そして私はそれを次のように取得します:

someType* getX() {return x;}

ポインタではなく値を取得したい:

someType getX() {return x;} //this is wrong

これの適切な構文は何ですか? ポインターではなく値を取得するにはどうすればよいですか?

4

3 に答える 3

12
someType getX() {return *x;}

ただし、これはx 値によって返されるxことに注意してください。つまり、各 return*のコピーを作成します。そのため (実際の内容によっては)代わりに参照someTypeを返すことを好む場合があります。

someType& getX() {return *x;}

参照による戻りは、構築コストが高く、オブジェクトの暗黙的なコピーが微妙なバグを引き起こす可能性がある非プリミティブ型に推奨されます。

* @ paul23が以下で正しく指摘しているように、これは戻り値の最適化によって場合によっては最適化される可能性があります。ただし、安全な動作は、一般的にこれを当てにしないことです。余分なコピーを作成したくない場合は、参照 (またはポインター) を返すことにより、コンパイラーと人間の読者の両方のコードで明確にします。

于 2012-05-15T10:47:59.000 に答える
2
someType getX() const { return *x; }

または、コピーするのにコストがかかる場合は、参照someTypeによって返します。const

someType const &getX() const { return *x; }

constメソッドの修飾子に注意してください。

于 2012-05-15T10:48:32.887 に答える
1
SomeType getX()
{
  //  SomeType x = *x; // provided there is a copy-constructor if    
  //  user-defined type.
  // The above code had the typo. Meant to be.
  SomeType y = *x;
   return y;
}
于 2012-05-15T10:47:51.817 に答える