[C++] using namespace

1. using namespace?

#include <bits/stdc++.h>
using namespace std;
string a;
int main(){
    cin >> a;
    cout << a << "\n";
    return 0;
}
Code language: PHP (php)
  • using namespace std;
    : std라는 namespace를 전역으로 선언한다. stdcincout을 사용하기 위해서 필요하다.
  • cin >> a; : a에 주어진 값을 대입한다.
  • cout << a << "\n"; : a에 값을 출력한다.

가. namespace란

우리가 프로그래밍을 하다 보면 다양한 라이브러리를 사용하게 된다.

이때 서로 다른 라이브러리의 서로 같은 이름의 함수, 변수 … 등을 사용하게 되는 경우가 있다.

#include <iostream>
using namespace std;

void A() {
    cout << "나 A에유" << endl;
}

void A() {
    cout << "내도 A라고!" << endl;
}

int main(void)
{
    A(); // ??????? 어느 A ???
    return 0;
}
Code language: PHP (php)

이때 이들을 구분하기 위해서 출신과 성분(?)을 밝히는 것이다.

#include <iostream>
using namespace std;

namespace BO {
    void A() {
        cout << "난 BOA에요" << endl;
    }
}

namespace NO {
    void A() {
        cout << "난 NOA에요" << endl;
    }
}


int main(void)
{
    // 이젠 구별이 가능하다!
    BO::A();
    NO::A();
    return 0;
}
Code language: PHP (php)

물론 사용할 때마다 매번 밝힐 수는 없으니 전역으로 혹은 지역으로 “여기서부터는 따로 말하지 않아도 어디 어디서 온 누구로 알아먹어라”라고 지정하는데 using namespace가 그 뜻이다.

using namespace BO;
A();
Code language: PHP (php)

물론 전체 namespace가 아닌 특정한 부분만 사용할 수 있다.

namespace BO {
    void A() {
        cout << "난 BOA에요" << endl;
    }
    void NOBONO() {
        cout << "난 보노보노에요" << endl;
    }
}
int main(void){
    using BO::A();
    A(); // 성공!
    NOBONO(); // 실패!
    return 0;
}
Code language: JavaScript (javascript)

주의할 점

  • using namespace도 선언되는 시점과 범위를 고려해야 한다는 것이다.
  • 변수처럼 전역이냐 지역이냐에 따라서 유효 범위가 다르다.
#include <iostream>
using namespace std;

namespace BO {
    void A() {
        cout << "난 BOA에요" << endl;
    }
}

namespace NO {
    void A() {
        cout << "난 NOA에요" << endl;
    }
}

void Local(){
    using namespace BO; // 지역
    A(); // 가능!
}

int main(void)
{
    Local(); // SUCESS !!
    A(); // ERROR!!!    
    return 0;
}
Code language: PHP (php)

namespace에 대한 다양한 예제는 찾아보면 많다.

(절대 따로 정리하기 귀찮아서가 아니다. 진짜 아니다.)

참고 : https://blockdmask.tistory.com/474

https://blockdmask.tistory.com/474


댓글 남기기