Что бы 'std:;' делать в c++?
недавно я модифицировал некоторый код и обнаружил уже существующую ошибку в одной строке внутри функции:
std:;string x = y;
этот код все еще компилируется и работает как ожидалось.
определение строки работает, потому что этот файл является using namespace std;
, Так что std::
не было необходимости в первую очередь.
вопрос в том, почему это std:;
компиляция и что, если что-нибудь, он делает?
5 ответов:
std:
это метка, используемая в качестве цели дляgoto
.Как отмечает @Adam Rosenfield в комментарии, это юридическое название ярлыка.
C++03 §6.1 / 1:
метки имеют свое собственное пространство имен и не мешают другим идентификаторам.
компилятор говорит вам, что происходит:
#include <iostream> using namespace std; int main() { std:;cout << "Hello!" << std::endl; }
оба gcc и clang дают довольно четкое предупреждение:
std.cpp:4:3: warning: unused label 'std' [-Wunused-label] std:;cout << "Hello!" << std::endl; ^~~~ 1 warning generated.
вынос из этой истории: всегда компилируйте свой код с включенными предупреждениями (например,
-Wall
).