최근에 일부 코드를 수정하고 함수 내 한 줄에서 기존 버그를 발견했습니다.
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
.