[09:50] return *this; 로 자기 자신을 참조로 리턴하는 부분

미해결질문
호두 프로필

안녕하세요.

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;
}

감사합니다.

PP TREE 프로필
PP TREE 2020.01.05

신기하네요. 표준에 새로 추가된 문법인 것 같아서 한 참을 뒤져봤는데 아직 못 찾았습니다. 컴파일러가 (프로그래머 편하라고) 내부적으로 만들어주는 것으로 추정됩니다.  최근에 type deduction 같이 편리한 문법이 많이 추가가 되었기 때문에 이런 문법도 추가가 된 것이 이상하지는 않습니다만, 정확한 문법은 저도 따로 알아봐야할 것 같습니다.

PP TREE 프로필
PP TREE 2020.01.05

Visual studio에서는 컴파일 에러가 나네요. 어디서 테스트하신 건가요? 그리고 중복 질문은 하나를 삭제해주시기 바랍니다.

호두 프로필
호두 2020.01.07

감사합니다. visual studio code에서 테스트했습니다.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스