Heute habe ich einen kleinen Tippfehler in meinem Programm gemacht, und war herumwandern, warum ich keine Ausgabe bekam, obwohl das Programm gut zusammengestellt. Grundsätzlich reduziert sie auf diesem:Warum wird <anstatt von << in der Stream-Ausgabe noch kompiliert?
#include <iostream>
int main()
{
std::cout < "test"; // no << but <
}
Ich habe absolut keine Ahnung, welche Art von impliziter Konvertierung hier durchgeführt wird, so dass das Programm noch kompiliert (beide g ++ 4.9.2 und auch g ++ 5). Ich habe gerade gemerkt, dass clang ++ den Code ablehnt. Wird eine Konvertierung in void*
durchgeführt (fällt Ihnen sonst nichts ein)? Ich erinnere mich, dass ich so etwas gesehen habe, aber ich dachte, dass es in g ++ 5 angesprochen wurde, aber das scheint nicht der Fall zu sein.
EDIT: I wurde mit der Zusammenstellung nicht -std=c++11
, so dass der Code gültig war in pre-C++ 11 (durch Umwandlung in void*
von ostream
). Beim Kompilieren mit -std=c++11
lehnt g ++ 5 den Code ab, g ++ 4.9 akzeptiert ihn jedoch weiterhin.
Ich bekomme eine Warnung von g ++ 4.9.2 über einen unbenutzten berechneten Wert, obwohl bei Verwendung von "-Wall" obwohl. –
@Raphael in der Tat, als ich kompilierte Ich habe nicht alle Warnungen gesehen, jetzt sehe ich und realisiert, was passiert ist, obwohl ich sagen muss, es ist ein bisschen ungewöhnlich. Ich benutze die meiste Zeit "-Wall", aber das war ein kleines Stück Code, das ich in erhabenem Text kompiliert habe und realisiert habe, dass es magisch funktioniert. – vsoftco
Warum [dies] (http://coliru.stacked-crooked.com/a/ 667a9c3ad1ee9afe) gibt 0 als Ausgabe? – Destructor