错误、漏洞、问题 - 页 1705

 
fxsaber:
愚蠢。你能告诉我为什么你不能这样做吗?
明白了。
 
fxsaber:
明白了。
解释一下
 
Комбинатор:
解释一下
你不能--有一个术语差距。
 
Комбинатор:
解释一下
this[0]这里是rvalue。
 
Sergei Vladimirov:
这里[0]是r值。

这就是不清楚的地方。

如果该任务在第一种情况下有效,那么从逻辑上讲,它在第二种情况下也应该有效。因为在第一种情况下,相同的r值被分配给了指针,但运算符随后就起作用了!

当然,这只是我的看法。但我想把它弄出来。

 
Комбинатор:

这就是我不明白的地方。

我也不明白。))更新,已经得到了。

如果转让在第一种情况下有效,那么从逻辑上讲,它在第二种情况下也应该有效。这是因为在第一种情况下,相同的r值被分配给了指针,但运算符在这之后就起作用了!"。

当然,这只是我的看法。但我想把它弄出来。

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:

这个不是,我也搞不清楚其中的区别。

如果你在指针上添加一个链接,它就会发挥作用。或一个双倍的指针。
 
Комбинатор:
如果你在指针上添加一个链接,它就会发挥作用。或一个双倍的指针。
我不明白,什么链接,在哪里?
 
呃,伙计。在第二个例子中,operator[]返回第i个元素的地址 - 当然,它不能被改变。傍晚时分,蠢蠢欲动。
 

哎呀,我慢下来了,第二个例子根本就不对。

这就是为什么符合逻辑的是

错误:从'int*'类型的r值初始化'int*&'类型的非静态引用无效