4f665g   3년 전

<질문>

소수점 자리가 적게 출력되는것을 n 개로,

소수점 아래 자리를 프로그래머가 원하는만큼 표현하고자 할 때

std::cout << fixed;          //소수점 아래로 고정
std::cout.precision( n );    //(정수포함) 전체 10자리 표현 여기에 n 이 들어갑니다

이 두 가지를 사용하여 쓰는것은 알겠는데요,

위에 using namespace std; 를 선언하면 cout << fixed 를 사용할 수 있게 되고,

선언하지 않으면 std::cout << fixed 를 사용할 수 없다고 하는데 (오류 : 식별자 'fixed' 가 정의되어 있지 않습니다)

선언하지 않았을때에 앞에 std:: 도 적어주는데 왜 이런 차이가 있는것인지 잘 모르겠습니다ㅠ 

진라면 순한맛 신생아 프로그래머에게 답을 알려주신다면

이번주 월요일부터 좋은일이 생기고 자고 일어나 눈을 떴을때 활기차고 만사가 잘 풀리게 될 것 입니다...

감사합니다ㅠ..

preview

rlarla97   3년 전



예로들어 님의 강아지 이름이 '야옹이'라고 하고 제 강아지 이름도 '야옹이'라고 한다면 누군가 '야옹이' 잘 지내냐고 묻는다면 누구의 고양이인지 알 수 있을까요?
이러한 문제로 정확하게 소속을 기재를 해주는 것이죠. 즉, std::fixed 라고 하면 std소속의 fixed를 쓰겠다는 것이구나!" 라고 소속이 명료해지고 이해가 가겠죠.


근데 사람은 귀찮은 걸 싫어합니다. std 에 있는 것을 매번 쓸 때마다 std:: 소속을 지정해주기엔 코드 길이도 길어지고 무엇보다 매번 찾아 쓰기 귀찮죠.

그래서 아예 주제를 '오늘은 질문자에 대한 얘기만 할 거야!' 라고 선언해버립니다. 그러면 누군가 '야옹이' 잘 지내? 라고 해도 아~ 질문자의 강아지인 '야옹이'를 말하는 것이구나!라고 이해할 수 있겠죠?
이렇듯 std라는 namespace를 using하겠다는 것입니다.

즉, using namespace std 을 선언한다는 것은 std에 있는 함수명, 변수명 등을 사용하겠다는 의미입니다.

그렇게 되면 std 소속을 매번 써줄 필요 없이 std에 포함된 함수나 변수명들을 쓸 수 있는 것이죠.
 

4f665g   3년 전

안녕하세요? 친절한 답변 감사합니다!

왜 using namespace ...; 를 쓰는지는 답변으로 인해 이해가 갔습니다만


using namespace std; 가 있을때 cout << fixed; 는 사용이 가능하지만,
using namespace std; 가 없을때 std::cout << fixed; 을
왜 사용할 수 없다고 오류가 발생하는지에 대해서는 잘 모르겠습니다ㅠㅠ

제 생각에는 using namespace std; 가 없으니,

cout << fixed 앞에 std:: 를 추가로 붙여주어서

" 너는 std의 fixed야! 알겠지? 그러니까 사용할게 " 라고 해준 것 같은데

" 아닌데!! 뺴ㅖㅔㅔ엑!! 아뉜데!! " -> 오류

이렇게 되어 좀 난감합니다.. 어떤 차이가 있는지 잘 모르겠어요..ㅠㅠ


다시 답변 주시면 더더더욱 좋은 일이 가득 생기실겁니다!!

ajw998   3년 전

fixed도 std::fixed로 수정해 주시면 되겠네요

ajw998   3년 전

std::cout << fixed 는 제일 앞에 std::를 썼다고 해도

(std::cout) << fixed 이렇게 해석 됩니다.

std:: 가 문장 전체를 수식하는게 아닙니다.

그러니 namespace를 안 쓰실 경우에는

std::cout << std::fixed 가 맞겠죠?

rlarla97   3년 전

제 생각에는 using namespace std; 가 없으니,

cout << fixed 앞에 std:: 를 추가로 붙여주어서

" 너는 std의 fixed야! 알겠지? 그러니까 사용할게 " 라고 해준 것 같은데

" 아닌데!! 뺴ㅖㅔㅔ엑!! 아뉜데!! " -> 오류

이 말씀 맞습니다. 제가 방금 말씀드렸듯이 using namespace std 을 선언한다는 것은 std에 있는 함수명, 변수명 등을 사용하겠다는 의미입니다.라고 했었죠.

반대로 말하면 using namespace std을 안해준다면 std에 있는 함수나 변수명을 쓰고싶을 경우 소속을 명확하게 알려주어야 한다는 것이죠.

아마 맨 앞에 써주면 된다고 이해하신 것 같은데 그 것이 아닌, 함수나 변수명 '바로 앞에'입니다.

즉, std::cout << fixed; 라고 한다면 cout의 소속이 std였다는 것은 알았어도 fixed의 소속은 모르죠.

그렇기 때문에 std::cout << std::fixed 라고 해주셔야 두 개 모두 정상적으로 쓸 수 있습니다.

쉽게 예시를 들어 말하자면 질문자님과 제가 우연하게도 다음과 같은 똑같은 동물과 그에 따른 똑같은 이름이 있다고 가정해보죠.

강아지 (이름 : 고양이)

여우 (이름 사막이)


그리고 저와 질문자님이 함께 있는데 누군가 이렇게 말을 겁니다.

"질문자의 사막이는 잘 지내? 아 그리고 고양이도 잘 지내니?"


그러면 사막이는 질문자인 것은 알겠지만, 고양이라고 부르는 강아지는 질문자 님의 강아지일까요? 제 강아지일까요?

장담할 수가 없죠. 

이렇듯 아예 주제를 설정(using namespace ~)을 해주지 않으면 어떤 네임스페이스의 변수명이나 함수를 쓰고싶다면 정확히 소속을 하나하나 다 기재를 해주어야 되는 것이죠.

즉, std::cout << fixed 라고 한다고 fixed 까지 자동으로 std:: 로 명시되는 것이 아닙니다. 하나하나, std::cout << std:: fixed; 라고 해주어야 되는 것이죠.

4f665g   3년 전

와.. 답글 달아주신 두 분 모두 감사합니다!

std:: 를 습관적으로 사용하다보니, std::가 문장 전체를 수식하지 않는다는

작은 부분은 생각지도 못한것 같습니다! 큰 깨달음을 얻었습니다!

이번주 월요일은 좋은일이 가득 생기고 자고 일어나 눈을 떴을때 개운함을 느끼며 만사가 잘 풀리게 될 것 입니다! 😄😄😄

댓글을 작성하려면 로그인해야 합니다.