살군의 보조기억 장치

Another memory device…

:: 으로 시작하는 namespace

leave a comment »

::으로 시작하는 네임스페이스는 global namespace 를 의미한다. 즉, 다른 네임스페이스 안에 있어도 global namespace 를 바로 접근할 수 있게된다. stackoverflow 에서 잘 설명해주신 분이 있어서 그대로 붙여넣는다.

This fully qualifies the name so that only the vector template in the std namespace in the global namespace is used. It basically means:

{global namespace}::std::vector myvec;

There can be a difference when you entities with the same name in different namespaces. For a simple example of when this could matter, consider:

#include <vector>

namespace ns
{
    namespace std
    {
        template <typename T> class vector { };
    }

    void f()
    {
        std::vector<int> v1;   // refers to our vector defined above
        ::std::vector<int> v2; // refers to the vector in the Standard Library
    }
};

Since you aren’t allowed to define your own entities in the std namespace, it is guaranteed that ::std::vector will always refer to the Standard Library container. std::vector could possibly refer to something else.

고로, 표준 라이브러리를 사용할 때는 ::std::vector 형식으로 사용을 하는 것이 정신건강에 좋다.


updated 2014.02.11

네임스페이스에 대해 좀 더 자세히 설명한 블로그가 있어서 붙인다. 기본적으로 namespace 는 새로운 scope 를 지정하는 것이라고 보면 되겠다.

예전에는, 특히 C 시절에는 global이라는 기본 namespace 하나밖에 없는 것과 마찬가지였지만 C++에서는 나만의 namespace를 정의할 수 있고, 심지어 이중 삼중으로 namespace 안에 또 namespace를 만들 수도 있다. 심볼들의 입체적인 관리와 구별이 가능해진 것이다.
사실 namespace는 90년대에 나중에 추가된 키워드로, 도스 시절의 볼랜드 C++ 같은 컴파일러에서는 지원도 되지 않는다. (MFC 역시 namespace는커녕 템플릿조차 없던 시절부터 만들어져 온 클래스 라이브러리인지라, namespace를 사용한 흔적이 없음)

참고
Advertisements

Written by gomiski

2014/02/05 at 2:05 pm

Posted in C++, General, Lecture, opencv

Tagged with ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: