안녕하세요.
9분50초 부분에서
return *this; 가 없어도 체이닝을 할 수 있는데 그 이유가 궁금합니다.
this가 암묵적으로 리턴되는 거라고 봐도 되나요?
Calc& add(int value) {m_value += value; }
Calc& sub(int value) {m_value -= value; }
Calc& mult(int value) {m_value *= value; }
이렇게 인스턴스의 주소와 함수가 리턴한 값?의 주소를 찍어봤는데 동일하게 나오네요.
int main()
{
Calc cal(1);
cal.add(2).mult(3);
cout << &cal << endl;
cout << &(cal.add(1)) << endl;
// cal.add(5).mult(7).add(3).sub(6);
cal.print();
PS C:\coding\tbcpp_review\Chapter8> g++ .\8_7.cpp
PS C:\coding\tbcpp_review\Chapter8> .\a.exe
0x61fe1c
0x61fe1c
10
<전체 코드>
#include <iostream>
using namespace std;
class Calc
{
private:
int m_value;
public:
Calc(int init_value)
: m_value(init_value)
{}
Calc& add(int value) {m_value += value; }
Calc& sub(int value) {m_value -= value; }
Calc& mult(int value) {m_value *= value; }
void print()
{
cout << m_value << endl;
}
};
class Simple
{
private:
int m_id;
public:
Simple(int id)
{
setID(id);
cout << this << endl;
}
void setID(int id) { m_id = id;}
int getID() { return m_id;}
};
int main()
{
Calc cal(1);
cal.add(2).mult(3);
// cout << &cal << endl;
// cal.add(5).mult(7).add(3).sub(6);
cal.print();
// cal.add(10);
// cal.sub(1);
// cal.mult(2);
// cal.print();
// Simple s1(3), s2(5);
// s1.setID(7);
// s2.setID(9);
// cout << &s1 << " " << &s2 << endl;
// cout << s1.getID() << endl;
// cout << s2.getID() << endl;
return 0;
}
감사합니다.
신기하네요. 표준에 새로 추가된 문법인 것 같아서 한 참을 뒤져봤는데 아직 못 찾았습니다. 컴파일러가 (프로그래머 편하라고) 내부적으로 만들어주는 것으로 추정됩니다. 최근에 type deduction 같이 편리한 문법이 많이 추가가 되었기 때문에 이런 문법도 추가가 된 것이 이상하지는 않습니다만, 정확한 문법은 저도 따로 알아봐야할 것 같습니다.