Ich habe kürzlich Code geändert und einen bereits vorhandenen Fehler in einer Zeile innerhalb einer Funktion gefunden:
std:;string x = y;
Dieser Code wird immer noch kompiliert und funktioniert wie erwartet.
Die Zeichenfolgendefinition funktioniert, weil diese Datei vorhanden ist using namespace std;
, sodass sie überhaupt nicht std::
erforderlich war.
Die Frage ist, warum std:;
kompiliert wird und was, wenn überhaupt, getan wird.
using namespace std;
.http://www.stackoverflow.com
kompiliert ...using namespace std;
:)Antworten:
std:
Es ist ein Label, das als Ziel für verwendet werden kanngoto
.Wie von @Adam Rosenfield in einem Kommentar erwähnt, handelt es sich um einen legalen Markennamen.
C ++ 03 §6.1 / 1:
quelle
Es ist eine Bezeichnung, gefolgt von einer leeren Anweisung, gefolgt von der Deklaration einer Zeichenfolge
x
.quelle
Es ist eine Bezeichnung, auf die die Zeichenfolge folgt
quelle
quelle
(label-)statement
, keinexpression
.Der Compiler sagt Ihnen, was los ist:
Sowohl gcc als auch clang geben eine ziemlich klare Warnung:
Das Mitnehmen von dieser Geschichte: Kompilieren Sie Ihren Code immer mit aktivierten Warnungen (z
-Wall
. B. ).quelle