c++ 임시객체는 const아닌가요?
글쓴이: netionics / 작성시간: 토, 2007/09/08 - 9:28오후
class Some {...};
void print(Some& to_print) // 인자가 not-const입니다
{
cout << to_print << endl;
}
int main()
{
print(Some(100)); // error 임시객체를 non-const파라미터에 넘김
return 0;
}
Some(100)으로 생성한 임시 객체를 출력하는게 print 인자가 non-const이므로 에러가 납니다. (g++에서는 나고 visual studio에서는 에러를 안내더라고요. g++가 맞는 걸로 압니다.)
중요한거 그게아니고
Some to_add(300);
print(Some(100) += to_add);
이런 식으로 호출하면 아무런 에러메세지를 내보내지 않습니다.
operator+=는 non-const객체에서만 호출할 수 있게 정의했는데 어떻게 Some(100) += 문장이 성립할 수 있나요?
참고로 more effective 167쪽에 나온 코드도 비슷합니다.
return Rational(lhs) += rhs; 이런 식으로 반환을 하는 함수가 나와있습니다.
그냥 그려려니 하고 넘어가기에는 무지 찜찜합니다.
Forums:
Some(100) +=
Some(100) += to_add
는
Some(100).operator+=(to_add)
와 같습니다. non-const여야 하는 것은 함수 인자인 to_add지 Some(100)이 아니죠.
다음과 같은 경우에는 에러입니다.
const Some to_add(300);
Some(100) += to_add;
Some(100) += Some(200);
댓글 달기