1

Wrapper クラスの .h ファイルを見ています。また、クラスには 1 つのプライベート メンバーが含まれます。

T* dataPtr;

(ここでTtemplate < class T >、.h ファイルの先頭で定義されているとおりです)

このクラスは、2 つの「* オーバーロード演算子」メソッドを提供します。

T& operator*()
{
   return *dataPtr;
}

const T& operator*() const
{
  return *dataPtr;
}

どちらも単純に を返します*dataPtrが、" " という表記は*dataPtr実際には平易な英語で何を返しますか? そして、戻り値の型 " " とどのように適合しT&ますか?

4

4 に答える 4

6

戻り値の型 T& は、T オブジェクトのインスタンスの参照を返すことを示しています。dataPtr はポインターであり、* を使用して「逆参照」(ポインターの参照値/インスタンスを取得) します。

于 2009-05-10T19:39:12.077 に答える
2

dataPtr は何かへのポインターです。

* 演算子はポインターを逆参照するため、*dataPtr は (または、'is' の代わりに 'refers to' または 'is a reference to' と言うことができます) ポインター、つまり dataPtr が指している対象です。

T& は、「型が T であるオブジェクトへの参照」を意味します (「型が T であるオブジェクトへのポインター」を意味する T* と混同しないでください)。

于 2009-05-10T19:40:45.757 に答える
1

*DataPtrが指す実際のデータDataPtrです。どちらの演算子も への参照を返しますT参照は、それが参照する値の別の名前のように考える必要がある型です。「ボンネットの下」はポインターに似ていますが、そのように考えないでください。ポインター計算を行うことも、「再装着」することもできません。演算子の 1 つはオブジェクトでconst使用され、もう 1 つconstは通常のオブジェクトで使用されます。

于 2009-05-10T19:41:29.000 に答える
1

ラッパー クラスは、C++ ポインターのように動作しているようです。

演算子 * は、(dataPtr に) 保存するものに評価されるラッパーを逆参照します。あなたが得るのは、この内容への参照です。たとえば、参照に何かを割り当てることができます

*intWrapper = 42;

定数バージョンと非定数バージョンがあるため、2 つの演算子があります。定数ラッパー クラスを逆参照すると、代入できません (const 参照 (T&) が返されます)。

于 2009-05-10T19:41:34.117 に答える