2013-01-29 4 views
0

C++의 새 버전에서도 똑같이 작동하는 표준 네임 스페이스 (namespace std) 대신 사용할 수있는 (포함 된) C++ 헤더 파일이 있는지 궁금합니다. 네임 스페이스를 사용하지 않고 코드를 작성할 수 있고 문자열 데이터 형식을 사용할 수 있는지 알고 싶습니다.표준 네임 스페이스 대신 헤더 파일 사용

+1

왜 네임 스페이스를 추가하지 않으시겠습니까? –

+4

'using namespace std'와 no는 사용하지 마십시오. 왜냐하면 끔찍한 생각이기 때문입니다. –

+0

네임 스페이스 한정자가없는 오래된 코드가 있기 때문에 추측하고 있습니다. –

답변

4

stringstd 네임 스페이스에 있으므로 완전히 무시할 수 없습니다.

옵션은 비록이 있습니다 : 당신이 헤더에 넣을 수

using std::string; 
using namespace std; 
typedef std::string myString; 

//or fully qualify the name 
std::string mystr; 

가 포함되어 있습니다.

저기, 재앙에 대한 처방을 당신에게주었습니다. 사용하지 마십시오!

네임 스페이스가 좋습니다. 주위를 해킹하지 말고 사용법을 익히십시오.

+0

'std :: string;을 사용하면 적어도 "* 특정 부분이 많이 필요합니다" lololo *, 코드를 가져와. " (여전히, * 헤더에 넣지 마십시오) –

+0

"std :: string MyString"과 "typedef std :: string MyString"의 차이점은 무엇입니까? –

+0

@MohammadSanei는 첫 번째 변수를 만들고 두 번째는 형식을 정의합니다. –

2

헤더와 네임 스페이스는 관련이 없으며 네임 스페이스는 좋은 것입니다. using namespace std가 좋지 않습니다. using namespace std;없이 항상 std::string 데이터 형식을 사용할 수 있습니다.

0

사용할 수있는 클래스는 typedef이지만 실제로는 좋지 않습니다.

#include <string> 
typedef std::string string; 
+0

'using std :: string;'은 문자열을 현재 네임 스페이스에 가져 오는 기본 방법입니다. –

+0

예, 알고 있습니다. 그러나 그들은'using '을 사용하기를 원하지 않으며,'using'을 사용하여 헤더를 오염시키는 것은 좋지 않습니다. 하지만, 나는 대신에 다른 typename으로 오염시키고 있습니다. –

+0

완벽 해요! 방금 네가 한 말있어! 'using '을 사용하여 헤더 파일을 오염시키지 않고 비슷한 방법으로 cout과 endl을 정의 할 수있는 방법이 있습니까? –

2

"using namespace std;"를 사용하려면 가난한 생각입니다. (타이핑을 쉽게하기 위해 필자가 여기에 게시 한 샘플에서 오히려 정기적으로이 작업을 수행해야한다는 것을 인정해야합니다.) 헤더 파일에서 같은 것을 숨기려면 더 나쁜 생각입니다.

이유가 있기 때문에 네임 스페이스가 있습니다.

하지만 네임 스페이스 표준 이전에 작성된 기존 코드를 100000 줄 가지고 있다면 새 컴파일러에서 사용할 포트를 빠르게 바꾼 다음 "using namespace std;"를 추가하십시오. 각 파일의 맨 위에있는 것이 바람직한 해결책이 될 것입니다.

관련 문제