Что бы «std :;» делать в с ++?

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

std:;string x = y;

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

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

Вопрос в том, почему std:; компилирование и что, если вообще что-то происходит?

89

Решение

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

Как указано @ Адам Розенфилд в комментарии это официальное название ярлыка.

C ++ 03 §6.1 / 1:

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

90

Другие решения

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

32

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

12

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

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

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

1
По вопросам рекламы [email protected]