エラー、バグ、質問 - ページ 1705

 
fxsaber:
バカだなぁ。なぜそれができないのか、教えてください。
了解です。
 
fxsaber:
了解です。
説明
 
Комбинатор:
説明
それはうまくいかない。用語のギャップがあるのだ。
 
Комбинатор:
説明
this[0]ここがrvalueです。
 
Sergei Vladimirov:
ここで[0]はrvalueです。

これが、はっきりしないのです。

もし、最初のケースで課題がうまくいけば、論理的には2番目のケースでもうまくいくはずです。なぜなら、最初のケースでは、同じr値がポインタに代入されますが、その後、演算子は動作するからです!

もちろん、これは私の意見です。でも、何とかしたいんです。

 
Комбинатор:

そこが理解できないのです。

私も理解できません。))すでに入手済みです。

最初のケースで割り当てがうまくいくなら、2番目のケースでも論理的にうまくいくはずです。それは、最初のケースでは、同じrvalueがポインタに代入されるが、演算子はその後に働くからだ!

もちろん、これはあくまで私の意見です。でも、何とかしたいんです。

rvalueは左辺の値にしか割り当てられないか、一時的な定数である。

これがプラスに働くのです。

class A
{
public:
        int m[10];

        int& operator [] (const int i)
        {
                return((m[i]));
        }
};

int main()
{
        A oA;
        oA[2] = 5;
}

これはないですね。

class A
{
public:
        int* m[10];

        int* operator [] (const int i)
        {
                return((m[i]));
        }
};

int main()
{
        A oA;
        oA[2] = new int;    // error C2106: =: левый операнд должен быть левосторонним значением
}
 
Sergei Vladimirov:

これは違うんです、違いがわからないんです。

ポインターにリンクを貼れば動作します。ダブルポインターでもいい。
 
Комбинатор:
ポインターにリンクを貼れば動作します。ダブルポインターでもいい。
よくわからないのですが、どのリンク、どこですか?
 
うう、まいった。2番目の例では、operator[]はi番目の要素のアドレスを返します。もちろん、このアドレスは変更できません。夕方からバカ。
 

おっと、遅くなった、2つ目の例は全然正しくないな。

だからこそ、論理的に

error: 'int*' 型の rvalue からの 'int*&' 型の非恒等式参照の初期化が無効です。