class A
{
public:
int m[10];
int& operator [] (constint i)
{
return((m[i]));
}
};
int main()
{
A oA;
oA[2] = 5;
}
これはないですね。
class A
{
public:
int* m[10];
int* operator [] (constint i)
{
return((m[i]));
}
};
int main()
{
A oA;
oA[2] = newint; // error C2106: =: левый операнд должен быть левосторонним значением
}
バカだなぁ。なぜそれができないのか、教えてください。
了解です。
説明
説明
ここで[0]はrvalueです。
これが、はっきりしないのです。
もし、最初のケースで課題がうまくいけば、論理的には2番目のケースでもうまくいくはずです。なぜなら、最初のケースでは、同じr値がポインタに代入されますが、その後、演算子は動作するからです!
もちろん、これは私の意見です。でも、何とかしたいんです。
そこが理解できないのです。
私も理解できません。))すでに入手済みです。
最初のケースで割り当てがうまくいくなら、2番目のケースでも論理的にうまくいくはずです。それは、最初のケースでは、同じrvalueがポインタに代入されるが、演算子はその後に働くからだ!
もちろん、これはあくまで私の意見です。でも、何とかしたいんです。
rvalueは左辺の値にしか割り当てられないか、一時的な定数である。
これがプラスに働くのです。
これはないですね。
これは違うんです、違いがわからないんです。
ポインターにリンクを貼れば動作します。ダブルポインターでもいい。
おっと、遅くなった、2つ目の例は全然正しくないな。
だからこそ、論理的に
error: 'int*' 型の rvalue からの 'int*&' 型の非恒等式参照の初期化が無効です。