-
[C++] namespace 와 std 의미Language/C++ 2022. 7. 30. 12:03
int main() { int name; name = 5; double name_example; // Error 발생 name_example = 3.0; }우선 변수와 같은 name 이라는 것은 namespace 내에서 오직 하나만 있어야 한다.
즉 코드 내에서 변수 a라는 게 존재하면, a가 또 존재할 수가 없는 유일한 entity라는 것이다.
다른 namespace에서는 동일한 이름을 가질 수 있다.
변수이름이 global 한 scope에서 제한된다면, 변수 이름이 서로 충돌날 것이다.
#include <bits/stdc++.h> int main(void) { std::cout << "Hello Wolrd!" << '\n'; }우리가 자주 사용하는 using namespace std의 의미를 알아보자.
std는 namespace를 의미한다.
:: operator는 scope operator로 Compiler 에게 어떤 클래스/ 네임스페이스를 식별자로 찾아갈지를 알려준다.
따라서 std:cout 이라 함은 compiler에게 std namespace내에서 정의된 cout을 찾아가라는 식으로 알려준다.
아래와 같이 std::를 제외하고 코드를 작성하면, 이는 compiler에게 cout을 std namespace가 아닌 global namespace에서 찾게 된다. cout은 global namespace에서 정의된 바가 없으므로 찾을 수가 없다.
#include <bits/stdc++.h> int main(void) { cout << "Hello Wolrd!" << '\n'; }using namespace std를 사용하게 되면 compiler에게 std에 있는 모든 것들을 global namespace에 덤핑하겠다 라는 뜻과 같다. 따라서 cout을 global namespace에서 사용할 수 있으므로 std::를 빼도 된다.
하지만 이렇게 global namepsace에 dumping 하는 것은 우리가 예상치 못한 이름끼리 충돌할 가능성을 높이는 부작용이 있다. 따라서 using namespace std; 보다 cout 앞에 std::를 명시하는 것을 권장하기도 한다.
#include <bits/stdc++.h> using namespace std; int main(void) { cout << "Hello Wolrd!" << '\n'; }'Language > C++' 카테고리의 다른 글
[C++ ] Arrow operator (0) 2022.08.03 [C++] C/C++ Pointer 변수 크기 (0) 2022.08.02 [BOJ 10808] 알파벳 개수 (0) 2022.07.30 [C++] 참조자 vs 포인터 (0) 2022.07.28