• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

1.14 전처리기 질문

19.06.25 10:51 작성 조회수 171

1

선생님 안녕하십니까?

C++ 매우 잘 배우고 있습니다. 좋은 강의 공유해 주셔서 감사합니다.

다름이 아니라 1.14강 5:32초 부근에

#include <iostream> 

#include <algorithm>

using namespace std;

 

int main()

{

     cout << std::max(1+3,2) <<endl;

}

이런 예시를 실행 시켜 주셨는데, 지난 1.13강에 따르면 namespace설명 때 using namespace std;라는 문장이 iostream 내에 std라는 명칭공간에 정의된 cout, cin, endl등을 바로 사용할 수 있도록 해준다라고 하셨는데요.

1. std::max(1+3,2)의 앞에 붙어있는 std는 algorithm이라는 라이브러리 내에 std namespace를 의미하는 것인가요?

2. 그렇다면 iostream의 std와 algorithm std가 저같은 경우 구분이 안되어 매우 혼동될 수 도 있는데 이에 대한 설명 주시면 감사드립니다.

 

3. 그럼 중간에 max를 std 사용하지 않고 하려면 using namespace를 어떤 문장 넣어야할까요?

(예시 지난 1.13강의에서 using namespace Myspace1:Inspace;)이런식으로 사용하셨는데,

이미 using namespace std; 문장이 선언되어 있어 매우 헷갈립니다.

 

감사합니다.

 

 

답변 2

·

답변을 작성해보세요.

0

정민기님의 프로필

정민기

질문자

2019.06.25

상세한 답변 감사드립니다 ^^

0

이 부분을 헷갈려하시는 분들이 꽤 많으시네요. std::는 안붙여주면 컴파일러가 알아서 찾아주는 것이지 붙였다고 해서 문제가 되는 것은 아닙니다. 문맥에 따라서 namespace를 분명하게 표시하고 싶은 경우 일부러 붙여주기도 합니다.

std::max(1+3, 2)도 원래는 max(...)로 실행시켜도 됩니다. 그런데 나중에 여러가지 라이브러리를 많이 사용하다 보면 max()같이 흔히 사용되는 함수들은 여기저기 라이브러리들에 똑같은 이름으로 구현되어 있는 경우가 많습니다. (점점 정리가 되어갈겁니다.) 그래서 std::를 붙이지 않아도 되지만 붙여주는 경우가 많습니다.