작성
·
232
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
0
이 부분을 헷갈려하시는 분들이 꽤 많으시네요. std::는 안붙여주면 컴파일러가 알아서 찾아주는 것이지 붙였다고 해서 문제가 되는 것은 아닙니다. 문맥에 따라서 namespace를 분명하게 표시하고 싶은 경우 일부러 붙여주기도 합니다.
std::max(1+3, 2)도 원래는 max(...)로 실행시켜도 됩니다. 그런데 나중에 여러가지 라이브러리를 많이 사용하다 보면 max()같이 흔히 사용되는 함수들은 여기저기 라이브러리들에 똑같은 이름으로 구현되어 있는 경우가 많습니다. (점점 정리가 되어갈겁니다.) 그래서 std::를 붙이지 않아도 되지만 붙여주는 경우가 많습니다.