• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[2:06초] int getCents() 함수 사용시, add 함수에서 m_cents의 값을 변경할 수 없는 이유

20.11.02 21:21 작성 조회수 118

7

안녕하세요, 비슷한 질문이 많이 올라온거같은데 제가 이해가 잘 안되서 더 구체적으로 여쭤봅니다.
아래와 같이 코드를 작성하면 add 함수 내에서 c_out 에 "expression must be a modifiable lvalue"라는 에러가 발생합니다. [2:06초]즈음에 교수님께서는 int& getCents() {return m_cents;}로 코드를 작성하시면 앞의 에러가 발생하지 않죠.

#include <iostream>
using namespace std;

class Cents
{
private:
    int m_cents;
public:
    Cents(int cents)
        :m_cents(cents)

{}

int getCents() const

{
return m_cents;
}

int getCents() { return m_cents; }
};

void add(const Cents &c1, const Cents &c2, Cents &c_out)

{

c_out.getCents() = c1.getCents() + c2.getCents(); //error 발생 

}

int main()

{

Cents cents1(6);

Cents cents2(8);

Cents cents3(0);

add(cents1, cents2, cents3);

return 0;

}

둘의 차이는 return by copy(RBC) 와 return by reference(RBR)임을 알고 있습니다. 이 때, RBC는 에러가 발생하고 RBR은 에러가 발생하지 않는 이유에 대해 풀어서 설명해주실 수 있을까요? RBC로 호출하면 r-value로 호출되어서 값의 수정이 안되고, RBR로 호출하면 reference로 반환되어 l-value로 값의 수정이 되는걸까요? 

바쁘시겠지만 설명해주시면 정말 감사하겠습니다.

답변 2

·

답변을 작성해보세요.

2

Hello Yeo님의 프로필

Hello Yeo

2020.11.02

안녕하세요?
생각하신 것이 맞습니다.

1

choiiohc1님의 프로필

choiiohc1

질문자

2020.11.02

빠른답변 주셔서 정말 감사드립니다.