Що означає "std :;" робити в C ++?


89

Нещодавно я модифікував деякий код і знайшов уже існуючу помилку в одному рядку у функції:

std:;string x = y;

Цей код все ще компілюється і працює належним чином.

Визначення рядка працює, оскільки цей файл є using namespace std;, тому std::спочатку це було непотрібним.

Питання в тому, чому std:;компіляція і що, якщо взагалі, робиться?


1
@Xeo: Він сказав у своєму питанні using namespace std;.
Фред Ларсон,

@Fred: Дерп! Ця частина не була позначена як код, тому я просто пропустив її. :) Однак я все-таки хотів би вказати на це питання .
Xeo

23
Те саме, що http://www.stackoverflow.comкомпілюється ...
Керрек СБ

19
Ще одна причина не використовувати using namespace std;:)
Девід Родрігес - dribeas

@KerrekSB Це сталося з моїм другом під час перегляду Reddit! Посилання виявилося таким : D
mmirzadeh

Відповіді:


90

std:це ярлик, який можна використовувати як мішень для goto.

Як зазначив @Adam Rosenfield в коментарі, це юридична назва.

C ++ 03 §6.1 / 1:

Етикетки мають власний простір імен і не заважають іншим ідентифікаторам.


4
Етикетки AFAIK мають власний простір імен, тому вони ніколи не конфліктують ні з чим іншим, крім ключових слів або макросів, звичайно.
rodrigo

11
C ++ 03 §6.1 / 1 говорить: "Етикетки мають власний простір імен і не заважають іншим ідентифікаторам."
Адам Розенфілд,

6.1 / 1: "Етикетки мають власний простір імен і не заважають іншим ідентифікаторам"
Джон Діблінг,

32

Це мітка, за якою слідує порожній вираз, за ​​яким слідує оголошення рядка x.




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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.