J'ai récemment modifié du code et j'ai trouvé un bogue préexistant sur une ligne dans une fonction:
std:;string x = y;
Ce code se compile toujours et fonctionne comme prévu.
La définition de chaîne fonctionne parce que ce fichier est using namespace std;
, donc le std::
n'était pas nécessaire en premier lieu.
La question est: pourquoi std:;
compile-t-elle et que fait-elle, le cas échéant?
using namespace std;
.http://www.stackoverflow.com
compile ...using namespace std;
:)Réponses:
std:
c'est une étiquette, utilisable comme cible pourgoto
.Comme l'a souligné @Adam Rosenfield dans un commentaire, il s'agit d'un nom d'étiquette légal.
C ++ 03 §6.1 / 1:
la source
C'est une étiquette, suivie d'une instruction vide, suivie de la déclaration d'une chaîne
x
.la source
C'est une étiquette qui est suivie de la chaîne
la source
la source
(label-)statement
, pas unexpression
.Le compilateur vous dit ce qui se passe:
Gcc et clang donnent un avertissement assez clair:
Le point à retenir de cette histoire: compilez toujours votre code avec les avertissements activés (par exemple
-Wall
).la source