Fehler, Irrtümer, Fragen - Seite 1705

 
fxsaber:
Dumm. Können Sie mir sagen, warum Sie das nicht tun können?
Ich hab's.
 
fxsaber:
Ich hab's.
Erklären Sie
 
Комбинатор:
Erklären Sie
Das kann man nicht - es gibt eine terminologische Lücke.
 
Комбинатор:
Erklären Sie
this[0] ist hier rvalue.
 
Sergei Vladimirov:
hier[0] ist rWert.

Das ist es, was nicht klar ist.

Wenn die Zuordnung im ersten Fall funktioniert, sollte sie logischerweise auch im zweiten Fall funktionieren. Denn im ersten Fall wird dem Zeiger derselbe r-Wert zugewiesen, aber der Operator funktioniert dann!

Das ist natürlich nur meine Meinung. Aber ich will es schaffen.

 
Комбинатор:

Das ist es, was ich nicht verstehe.

Ich verstehe das auch nicht. )) Aktualisierung. Schon erledigt.

Wenn die Zuweisung im ersten Fall funktioniert, sollte sie logischerweise auch im zweiten Fall funktionieren. Das liegt daran, dass im ersten Fall dem Zeiger derselbe r-Wert zugewiesen wird, der Operator aber danach funktioniert!

Dies ist natürlich nur meine Meinung. Aber ich will es schaffen.

rvalue kann nur einem linkshändigen Wert zugewiesen werden oder eine temporäre Konstante sein.

Das ist es, was in den Pluspunkten funktioniert:

class A
{
public:
        int m[10];

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

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

Dieser hier nicht.

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:

Das hier ist es nicht, und ich kann den Unterschied nicht herausfinden:

Wenn Sie dem Zeiger einen Link hinzufügen, wird er funktionieren. Oder ein Doppelzeiger.
 
Комбинатор:
Wenn Sie dem Zeiger einen Link hinzufügen, wird er funktionieren. Oder ein Doppelzeiger.
Ich verstehe nicht, welcher Link, wo?
 
Igitt, Mann. Im zweiten Beispiel gibt operator[] die Adresse des i-ten Elements zurück - sie kann natürlich nicht geändert werden. Dumm am Abend.
 

Ups, ich werde langsamer, das zweite Beispiel ist gar nicht richtig.

Deshalb ist es logisch, dass

Fehler: Ungültige Initialisierung einer Nicht-Konst-Referenz vom Typ 'int*&' aus einem r-Wert vom Typ 'int*'