c++ 초보가 질문 드립니다.
글쓴이: interoasis / 작성시간: 화, 2011/03/01 - 7:16오후
#include <iostream> #include <cmath> using namespace std; class vector { protected: double k; public: double x; double y; vector(double a = 0, double b = 0) { x = a; y = b; } double module() { cout << "module " << x << " : " << y << endl; return sqrt(x * x + y * y); } void set_length(double a = 1) { double length; length = module(); x = x / length * a; y = y / length * a; } }; int main() { vector a(3, 5); cout << "-->" << a.module() << endl; a.set_length(2); cout << "-->" << a.module() << endl; a.set_length(); cout << "-->" << a.module() << endl; }
위의 예제를 컴파일하고 실행해봤는데요. 실행결과가 이렇게 나오더군요.
module 3 : 5 -->5.83095 module 3 : 5 module 1.02899 : 1.71499 -->2 module 1.02899 : 1.71499 module 0.514496 : 0.857493 -->1
제 생각에는 소스대로라면 --> 먼저 나오고 그 다음 module 3 : 5라는 출력이 나와야 할것 같은데 왜 -->가 나중에 나오는걸까요? 아무리 생각해도 풀리지않아 여쭤봅니다.
그리고 c++책을 사려고하는데요. C언어를 배웠다는 가정하에 읽을만한 책이 뭐가있을까요? 이곳에서 검색해보니 저한테 맞는건 C++ Primer라는 책같던데,, 글 쓰인 시기가 좀 오래된것들뿐이라서요. 요즘에 나온것들중에 괜찮은 C++책 있을까요? 인터넷에 잘 정리된곳에서 공부를 하고있긴하지만 c++을 이해하기엔 뭔가 좀 부족하다는 느낌이 드네요. 효율적인 예제와 코드설명이 잘 돼있어서 이해에 도움이 되는 책이었음 좋겠습니다. 연습문제 많으면 더 좋구요. 원서였으면 좋겠네요.
그럼 답변 부탁드리겠습니다.
Forums:
a.module() 이 오퍼레이터 << 의 인수로
a.module() 이 오퍼레이터 << 의 인수로 먼저 evaluate 되면서 side effect 로 문자열이 출력됩니다.
C++ 의 syntax 에 관한 책은 나올건 다 나왔다고 생각되는데, 옛날 책들이 더 좋은 것 같은데요.
Thinking in C++ 먼저 보고, 이른바 Expert's guide라고 하는 The C++ Programming Language 정도 마스터하면 충분할 듯.
답변 감사드립니다. 그럼 어떤 우선순위로 인수가 <<
답변 감사드립니다.
그럼 어떠한 경우에, 어떤 우선순위로 인수가 << 에 평가되는건가요? 다른 비슷한 예문들을보면 그냥 순서대로, 생각한데로 잘 출력이 되던데요.. side effect라함은 정상적이지 못한 작동이라는건가요?
...
side effect는 우리말로 하면 "부작용"이 되어서-_- 정상적이지 못하다는 느낌을 줄 수 있는데, 그런 의미가 아니라 그냥 함수를 실행하면 그 함수가 인자를 바꾸고 결과값을 돌려주는 것 외에 global state를 바꾸는 아무 일이나 하면 (로그를 찍는다든지...) 다 side effect라고 부릅니다.
그리고 "다른 비슷한 예문들을 보면 그냥 순서대로, 생각한 대로 잘 출력이" 되는 건
순전히 우연입니다.
절!대!로! 그런 걸 가정하고 프로그램을 짜시면 안됩니다.
C(++)에서 a+b 혹은
a<<b
같은 코드를 만났을 때 a와 b 중 무엇부터 연산하느냐는 전적으로 컴파일러 맘대로입니다. 괄호를 아무리 많이 쳐도 소용없습니다.댓글 달기