ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.