0

なぜ *(ptra + 0).prop無効で有効ではないのです(*(ptra + 0)).propか?。ドット演算子の左側は構造体でなければならないことを私は知っています。しかし、私はまだ混乱しています。誰かが私に2つの違いを説明できますか?

class myobj 
{
public:
    int v;
};

int main()
{

    myobj *ptra = new myobj[2]();

    *(ptra + 0).v = 12 //Error

    (*(ptra + 0)).v = 12 ; //OK

    return 0;

}
4

2 に答える 2

3

より優先順位operator .が高いので、operator *

*(ptra + 0).v

意味

*((ptr + 0).v)

ではなく

(*(ptra + 0)).v

*((ptr + 0).v)(ptr + 0)はクラスまたはユニオンではないため、ここでは構文が正しくありません。したがって、メンバーはありません。

于 2012-10-21T20:22:21.120 に答える
0

このようなエラーは、演算子の優先順位が原因です。この場合、実行される最初の演算子はでoperator.あり、実行される2番目の演算子はinsoperator*です。これが、たとえ非常によく似ていても、一方の行がコンパイルされ、もう一方の行がコンパイルされない理由です。

この演算子の優先順位を上書きするには、次のように括弧を使用します

(1 + 2) * 3 = 9

とは対照的に

1 + 2 * 3 = 7.
于 2012-10-21T20:21:35.223 に答える