int main() {
int y;
int x{ y = 5 };
//x is 5
}
Wie ist das möglich, da y = 5 kein berechenbarer Ausdruck ist?
Warum beschwert sich der Compiler oder die IDE nicht darüber, dass main () kein int zurückgibt?
c++
initialization
declaration
assignment-operator
counterstriker0
quelle
quelle
y = 5
ist ein Ausdruck und hat Wert5
. Warum denkst du, ist es nicht?return
vonmain
siehe diese Frage .y = 5
hier 5 ergibt. Die Möglichkeit von Zuweisungsoperatoren, etwas zurückzugeben, ist in der Tat eine bizarre Funktion von C / C ++.Antworten:
Ich werde von Ihrer letzten Frage ausgehen
Nach dem C ++ Standard (6.6.1 Hauptfunktion)
Und relativ zu dieser Frage
Aus dem C ++ - Standard (8.18 Zuweisungs- und zusammengesetzte Zuweisungsoperatoren)
Sp diese Erklärung
kann äquivalent in zwei Aussagen aufgeteilt werden
Darüber hinaus können Sie in C ++ auf folgende Weise sogar auf die Variable y verweisen
Hier ist ein Demonstrationsprogramm
Seine Ausgabe ist
Sie können diese Erklärung
auch gerne umschreiben
Berücksichtigen Sie jedoch, dass zwischen diesen beiden Erklärungen (ähnlich wie in den obigen Erklärungen) ein Unterschied besteht.
und
In der ersten Deklaration hat die Variable
x
den Typint
. In der zweiten Deklaration hat die Variablex
den Typstd::initializer_list<int>
.Um den Unterschied besser sichtbar zu machen, sehen Sie, wie die Werte der Objekte ausgegeben werden.
Die Programmausgabe ist
quelle
Es handelt sich um eine Zuweisung, und Zuweisungen ergeben Werte, dh den "cv-unqualifizierten Typ des linken Operanden", siehe [expr.ass / 3] . Daraus
y = 5
ergibty
sich5
, was zur Initialisierung verwendet wirdx
.Bezüglich Ihrer zweiten Frage siehe cppreference on main (oder [basic.start.main / 5] ):
Daher wäre ein Compiler oder eine IDE, die Sie vor einer fehlenden
return
Anweisung am Ende warntmain
, eindeutig falsch. Zugegeben, die Tatsache, dass Sie immerreturn
Objekte von Nicht-void
Funktionen ausführen sollten,main
ist irgendwie ... nun, aus historischen Gründen, denke ich.quelle
return
einen. -pedanticDas
operator=()
Ergebnis ist ein Wert, der der Variablen zugewiesen ist. Aus diesem Grund ist es möglich, Aufgaben wie folgt zu verketten:quelle
Wenn Sie sich die Dokumentation zu cppreference ansehen , werden Sie feststellen , dass
operator=()
ein Verweis auf das zugewiesene Objekt zurückgegeben wird. Daher kann eine Zuweisung als Ausdruck verwendet werden, der das zugewiesene Objekt zurückgibt.Dann ist es nur eine normale Aufgabe mit geschweiften Klammern.
quelle