8

これは構文上の優雅さの問題ですが、私はC ++を学び、ポインターをいじっています。クラスCarがある場合、そのクラスの新しいインスタンスへのポインタを次のように作成できます。

Car * Audi = new Car;

そのクラスにメンバー変数の重み(たとえば、unsigned int)がある場合、どちらでもアクセスできます

(*Audi).weight

また

Audi->weight

そのクラスがそれ自体がポインタであるメンバー変数ageを持っている場合、私はどちらかでそれにアクセスできます

*((*Audi).age)

また

*(Audi->age)

ポインタを逆参照するこれらの2つの(確かに特に複雑ではない)方法のいずれか以外の方法はありますか?考えたかった

Audi->*age

動作しますが、残念ながら動作しません。

(通常、アクセサーが望ましいことを感謝します。興味があるだけです。)

4

4 に答える 4

7
*(Audi->age)

前置演算子の優先順位は非常に低いため、括弧は必要ありません。

*Audi->age
于 2012-06-28T16:34:07.603 に答える
2

誰もこのように言及していません:

Audi->age[0]
于 2012-06-28T15:18:42.020 に答える
0

構文的には、関数またはマクロを作成する場合を除き、そうではありません。できますが、私に尋ねたら、アクセサーを使用してください。また、ほとんどのオブジェクトをヒープに割り当てたくありません。type foo;それらをorとして宣言し、それらをtype foo = type()スタックに置くだけです。動的割り当てはオーバーヘッドが大きいため、特に正当な理由がない限り、動的割り当てを使用してヒープに物を置かないでください。

于 2012-06-28T15:08:25.343 に答える
0

が指す値にアクセスする通常の方法ageは、あなたが言及したものです:

*(Audi->age)

->*メソッドへのポインターに関係することとは、まったく異なる意味があります。

最近の C++ では、通常、ポインタとの接触はあまりありません。調べるのは問題ありませんが、実際のコードを書き始めたら、できるだけポインターを避けるようにしてください。スタックはあなたの友達です:)

于 2012-06-28T15:16:11.383 に答える