Что бы 'std:;' делать в c++?


недавно я модифицировал некоторый код и обнаружил уже существующую ошибку в одной строке внутри функции:

std:;string x = y;

этот код все еще компилируется и работает как ожидалось.

определение строки работает, потому что этот файл является using namespace std;, Так что std:: не было необходимости в первую очередь.

вопрос в том, почему это std:; компиляция и что, если что-нибудь, он делает?

5 89

5 ответов:

std: это метка, используемая в качестве цели для goto.

Как отмечает @Adam Rosenfield в комментарии, это юридическое название ярлыка.

C++03 §6.1 / 1:

метки имеют свое собственное пространство имен и не мешают другим идентификаторам.

это метка, за которой следует пустой оператор, а затем объявление строки x.

его метка, за которой следует строка

(expression)std: (end of expression); (another expression)string x = y;

компилятор говорит вам, что происходит:

#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).