2010-03-24 7 views
3
#include <iostream> 
using namespace std; 

int main() { 
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! 
    return 0; 
} 

두 번째 문을 제거하면 빌드가 실패합니다.왜 namespace std를 사용해야합니까?

왜 필요한가요?

+9

C + +를 배우는 책에서 무엇에 대해 말해야합니까? –

+2

당신의 의견은 정말로 도움이됩니다 :) –

답변

12

std 네임 스페이스 안에 coutendl이 포함되어 있기 때문에.

using namespace std 줄을 제거하고 std::coutstd::endl을 대신 입력 할 수 있습니다.

Stuff.h을 : 여기

명확 네임 스페이스를해야한다 예입니다

namespace Peanuts 
{ 
    struct Nut 
    { 
    }; 
} 


namespace Hardware 
{ 
    struct Nut 
    { 
    }; 
} 

당신이 명시 적으로 네임 스페이스를 지정하지 않고 너트를 사용할 수 있습니다 using namespace Hardware 그런 짓을. 이러한 클래스 중 하나를 사용하는 소스의 경우, 1) 헤더를 포함하고 2) 클래스의 네임 스페이스를 지정하거나 using 지시어를 사용해야합니다.

네임 스페이스의 요점은 그룹화 및 네임 스페이스 충돌을 방지하기위한 것입니다. 당신의 #include 필요한 이유에 대한 질문에 대한

편집 :

#include <iostream>coutendl의 소스가 포함되어 있습니다. 이 소스는 iostream 내부에있는 std라는 네임 스페이스 안에 있습니다.

+0

또는'using namespace std'을 생략하고 대신'cout'과'endl'을'std :: cout'과'std :: endl'로 바꿀 수 있습니다. –

+0

그러면 'iostream'은 무엇입니까? std는 iostream에 정의되어 있습니까? – symfony

+0

당신은'iostream' 헤더를 포함하고 있지만'cout'과'endl'은 여전히 ​​std 네임 스페이스 ('std :: cout'과'std :: endl')에 있습니다. 'iostream'은 std에서 물건을 정의하지만, 그렇게하는 유일한 헤더는 아니다. 예 : 'std :: string'은'string'에 정의되어 있습니다.'using' 지시어는 std 네임 스페이스의 모든 것을 가져옵니다. –

2

cout은 네임 스페이스 std의 일부입니다. 이제 "std :: cout"을 사용하고 두 번째 줄을 지우면 컴파일됩니다.

+3

및 endl -> std :: endl – corn3lius

0

예 COUT 및 cerr은 isotream에 정의되어 있지만, 표준 : COUT 및 표준 : : cerr

으로 그 이유는 당신이 행복하게 worryign 일부 표준 라이브러리없이 최소 또는 최대 같은 일반적인 단어를 사용 할 수 있다는 것입니다있다 이미 그들을 고소했다면 std :: min과 std :: max를 쓰면된다. 이것은 모든 ATL 라이브러리 함수 앞에 'afx'를 넣는 예전 방식과 다르지 않습니다.

'using'문은 사람들이 여분의 타이핑에 대해 불평했기 때문에 'std 사용'을하면 표준에서 오는 모든 것 앞에 std ::를 의미한다고 가정합니다.
유일한 문제는 min() 또는 max()가있는 mystuff 라이브러리가있는 경우입니다. use std :: min()과 mystuff :: min()을 사용하면 문제가 없지만 'std'와 'mystuff 사용하기'를 사용하면 'c'와 같은 문제가 발생합니다.

ps. 원칙적으로 std :: cout을 넣는 것이 좋은 습관입니다. 사람들에게 이것이 표준 버전이 아니라 만든 cout의 로컬 버전이 아니라는 것을 분명히하기 위해서입니다.

관련 문제