Warum führt der explizite Aufruf von operator << auf std :: cout zu unerwarteten Ausgaben?

Ich war einfach gespannt, was passieren würde, wenn ich anrufeoperator<< aufstd::cout ausdrücklich, weil ich das gelernt habea.operator() ist genau das gleiche wiea(). Also mache ich es und es druckt etwas Seltsames:

#include <iostream>

using std::cout;

int main()
{
    cout.operator<<("Hello World");
}

Output: 0x80486a0

Seltsamerweise gibt es eine Adresse aus (die Adresse kann für Sie unterschiedlich sein, sollte aber immer noch eine Adresse sein). Ich denke, dies ist die Adresse der Zeichenfolge, also versuche ich, sie zu dereferenzieren, damit sie die Zeichenfolge ausgibt:

*( cout.operator<<("Hello World") );

Aber ich bekomme einen sehr langen Fehler

no match for operator* in '*std::cout.std::basic_ostream<...

Ich finde das ziemlich komisch. Nichts von demstd::cout Die Definition würde mich glauben lassen, dass dies zu einem anderen Verhalten führen würde. auch angesichts der Tatsache, dass der explizite Aufruf der Operatorfunktion keinen Unterschied macht (odersollte wenigstens).

Warum erhalte ich diese Ausgabe? Warum erhalte ich eine Adresse anstelle der Zeichenfolge, wenn ich den Operator explizit anrufe? Ist das überhaupt die Adresse im Speicher oder nur die Müllausgabe? Alle Antworten werden geschätzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage