sintaxis - ¿Qué sería ''std:;'' hacer en c++
sintaxis de c++ (5)
El compilador te dice lo que está pasando:
#include <iostream>
using namespace std;
int main() {
std:;cout << "Hello!" << std::endl;
}
Tanto gcc como clang dan una advertencia bastante clara:
std.cpp:4:3: warning: unused label ''std'' [-Wunused-label]
std:;cout << "Hello!" << std::endl;
^~~~
1 warning generated.
El quitar de esta historia: siempre compila tu código con advertencias habilitadas (por ejemplo, -Wall
).
Recientemente modifiqué un código y encontré un error preexistente en una línea dentro de una función:
std:;string x = y;
Este código aún se compila y ha estado funcionando como se esperaba.
La definición de cadena funciona porque este archivo using namespace std;
, por lo que el std::
era innecesario en primer lugar.
La pregunta es, ¿por qué es std:;
compilando y, en todo caso, ¿qué está haciendo?
Es una etiqueta que es seguida por la cuerda
Es una etiqueta, seguida de una declaración vacía, seguida de la declaración de una cadena x
.
std:
es una etiqueta, utilizable como objetivo para goto
.
Como señaló @Adam Rosenfield en un comentario, es un nombre de etiqueta legal.
C ++ 03 §6.1 / 1:
Las etiquetas tienen su propio espacio de nombre y no interfieren con otros identificadores.
(expression)std: (end of expression); (another expression)string x = y;