Programming/C++ STL2013. 3. 4. 00:18
namespace는 어떻게 보면 java에서의 패키지와 유사한 묶음에 대한 접근관리라고 하면 되려나?

아래와 같은형식으로 선언이 되며
namespace _spacename_
{


다른 namespace 에서는 동일한 변수 명을 선언해도 문제가 없다.
대신에 :: scope 연산자를 통해서
어떠한 영역의 변수인지를 알려주어야 한다.

물론 namespace 역시 선언되지 이전에 먼저 사용할수는 없으며
사용시에는 에러가 발생한다.
using namespace std;
using namespace first;

namespace first
{
int x = 5;
int y = 10;
}

namespace second
{
double x = 3.1416;
double y = 2.7183;
}

int _tmain(int argc, _TCHAR* argv[])
{
cout << x << endl;
cout << y << endl;
cout << second::x << endl;
cout << second::y << endl;
return 0;
} 

cpp_console.cpp(7) : error C2871: 'first' : 같은 이름을 가진 네임스페이스가 없습니다.
cpp_console.cpp(23) : error C2065: 'x' : 선언되지 않은 식별자입니다.
cpp_console.cpp(24) : error C2065: 'y' : 선언되지 않은 식별자입니다. 

물론, using은 중복되는 여러개를 사용할 수 있으나
using namespace std;

namespace first
{
int x = 5;
int y = 10;
}

namespace second
{
double x = 3.1416;
double y = 2.7183;
}

using namespace first;

int _tmain(int argc, _TCHAR* argv[])
{
cout << x << endl;
cout << y << endl;
cout << second::x << endl;
cout << second::y << endl;
return 0;
} 
[링크 : http://www.cplusplus.com/doc/tutorial/namespaces/]

아무래도 네임스페이스 내에 어떤 변수가 있을지 모르니
되도록이면 여러개의 using namespace는 쓰지 않는게 정신건강에 좋을듯 하다. 
실험은 조금 더 해봐야 겠지만..
해제하는 명령은 존재하지 않는것 같기에
using namespace는 {} 에 영향을 받으므로 블럭으로 감싸서 어느정도 회피는 가능하다고 한다.
[링크 : http://blog.naver.com/harkon/120061325101]

'Programming > C++ STL' 카테고리의 다른 글

c++ function overloading  (2) 2013.03.04
c++ class member function  (0) 2013.03.04
c++ namespace  (0) 2013.03.04
c++ class와 struct  (0) 2013.03.03
c++ cout 제어하기  (0) 2013.02.15
c++ inheritance(상속)  (0) 2013.02.15
Posted by 구차니

댓글을 달아 주세요