‘std :;’는 무엇입니까? C ++에서합니까? 기존 버그를 발견했습니다. std:;string x = y; 이 코드는

최근에 일부 코드를 수정하고 함수 내 한 줄에서 기존 버그를 발견했습니다.

std:;string x = y;

이 코드는 여전히 컴파일되고 예상대로 작동합니다.

이 파일이 있기 때문에 문자열 정의 작동 using namespace std;(가) 때문에, std::처음부터 필요했다.

문제는 왜 std:;컴파일이되며 무엇을하고 있는가입니다.



답변

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 .


답변