[완료] Ivor Horton 의 "beginning ANSI c++" 예제 중에서 이해가...

lampo의 이미지

Ivor Horton 의 "beginning ANSI c++" 제 3 판의 예제인데
잘 안되는 군요.

다음 예제는 이 책(번역본, 에이콘출판사)의 p.354 내용입니다.
아래 코드와 같이 레퍼런스타입 매개변수에 const 를 부가하면 상수를 인수로 받을수
있다고 설명하고 있군요. 그러나 컴파일하면 안됩니다.

저자는 자신있게 된다고 적어놨는데...
이 사람 믿어도 될까 싶네요.

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

int larger(int& m, int& n);

int main() {
int value1 = 10;
int value2 = 20;

cout << endl << larger(value1, value2) << endl;
cout << endl << larger(value1, 15) << endl; // 요부분.
return 0;
}

int larger(const int& m, const int& n) { // 요부분.
return m > n ? m : n;
}

cppig1995의 이미지

이 경우 컴파일러가 알아서 임시 변수를 만들어줘야 하는데 컴파일러 탓을 해보세요.
-> 수정: 그렇게 돼있었군요. 이 경우 컴파일러가 처음에 int &로 인식하여 임시 변수를 만들지 않은 것 같은데,
const int &로 실제 돼있을 때 아무 말도 안 했군요. const는 상관 없다는 규정이 표준에 있나요?

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

primewizard의 이미지

함수 선언에서

이것을
int larger(int& m, int& n);

이렇게
int larger(const int& m, const int& n);

lampo의 이미지

제 실수였네요. 가르쳐주셔서 감사합니다.