강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

따베수강생님의 프로필 이미지
따베수강생

작성한 질문수

홍정모의 따라하며 배우는 C++

9.9 복사 생성자, 복사 초기화 반환값 최적화

doSomething 함수에서

작성

·

261

1

Fraction doSomething() {

Fraction temp(2, 1);

return temp;

}

이렇게 만드셨는데 저는

Fraction doSomething() {

return Fraction temp(2, 1);

이렇게 하려고 하니까  type name is not allowed 에러가 뜨더라구요

그런데 <<생성자 오버로딩에서 

friend std::ostream& operator << (std::ostream& out, const Fraction& f) {

return out << f._numerator << " / " << f._denominator << endl;

}

이 함수는 교수님처럼 안하고 리턴에 한번에 이렇게 써줘도 문제가 없던데 앞에서는 왜 에러가 나고 여기선 문제가 없을까요?

답변 1

3

안녕하세요.

질문자님은 위와 같은 형태로 리턴하려고 하신 것이나 마찬가지입니다.

리턴문 안에서는 L-value 변수를 새롭게 정의할 수 없습니다. 

따라서 리턴문안에서 Fraction temp 를 새롭게 만드시고 이를 리턴하려고 하시면 안됩니다.

이렇게 미리 a를 정의 해주시고 그 a를 리턴하셔야 해요!

아래 연산자 오버로딩도 그렇고 맨 위의 코드가 문제 없었던 이유는 기존에 이미 정의되어 있는 것을 리턴하는 것이라 문제가 없기 때문입니다.

따베수강생님의 프로필 이미지
따베수강생

작성한 질문수

질문하기