04.08 - using 명령문
표준 라이브러리를 많이 사용하는 경우, 표준 라이브러리에서 사용을 위해서 std::
를 입력해야 한다.
C++은 using
명령문을 사용한 단순한 방법을 제공한다.
The using declaration
단순화하는 한 가지 방법은 using
선언문을 사용하는 것이다.
#include <iostream>
int main()
{
using std::cout;
cout << "Hello world!";
return 0;
}
using
선언문 using std::cout;
을 사용하면 컴파일러에 std namespace에서 cout을 사용할 것이라고 알려준다. 따라서 cout을 사용할 때마다 std::cout을 의미한다고 가정할 것이다. 만약 std:cout과 cout의 다른 사용법 사이에 이름 충돌이 있으면 std::cout이 선호된다.
위 간단한 예제는 많은 노력을 들이지 않고 함수 내부에서 cout을 많이 사용하는 경우 using 선언을 사용하여 코드를 더 읽기 쉽게 만들어준다. 그러나 사용하는 이름에 대한 선언(Ex. using std::endl, using std::cin)을 일일이 해줘야 하는 번거로움이 있다.
The using directive
일을 단순화하는 또 다른 방법은 using
지시문을 사용하는 것이다.
#include <iostream>
int main()
{
using namespace std;
cout << "Hello world!";
return 0;
}
using 지시문
using namespace std;
은 컴파일러에 "std 네임스페이스의 모든 것을 사용하고 싶다"고 말하므로 컴파일러가 인식하지 못하는 이름을 찾으면 std 네임스페이스를 검사한다. 따라서 컴파일러가 "cout"(인식할 수 없는)을 발견하면 std 네임스페이스에서 찾는다. 만약 std:cout과 cout의 다른 사용법 사이에 이름 충돌이 있으면 오류가 발생한다.
설명을 위해 using 지시문의 모호함을 일으키는 예제를 살펴보자:
#include <iostream>
namespace a
{
int x(10);
}
namespace b
{
int x(20);
}
int main()
{
using namespace a;
using namespace b;
std::cout << x << '\n';
return 0;
}
위 예제에서 컴파일러는 x가 a::x와 b::x 중에 무엇을 참조해야 하는지 확인할 수 없다. 이 경우, “ambiguous symbol” 오류가 뜨며 컴파일하는 데 실패한다. using 지시문 중 하나를 제거하거나 명시적인 a:: 또는 b:: 접두어를 붙여 사용해야 이 오류를 해결할 수 있다.
또 다른 모호한 예제:
#include <iostream>
int cout()
{
return 5;
}
int main()
{
using namespace std;
cout << "Hello, world!";
return 0;
}
위 예에서 컴파일러는 std:cout 함수와 정의한 cout함수 중 어떤 것을 의미했는지 결정할 수 없어, " 모호한 기호" 오류로 컴파일하지 못한다.
번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/4-3c-using-statements/ 입니다.