#include<iostream>

using namespace std;


class AAA

{

public:

        int num;

public:

        AAA(int n) : num(n)

        { }

};


AAA func1()

{

        AAA a2(5);

        return a2;

}


int func2()

{

        int num=3;

        return num;

}

int main(void)

{

        AAA & ref1 = func1();

        int & ref2 = func2();

        cout<<ref1.num<<endl;

        cout<<ref2<<endl;

        return 0;

}





ref1으로는 값을 찍을 수 있고, ref2는 값을 찍을 수 없음.



func1 함수 내에서 반환하는 a2는, AAA형으로 반환이 되면서 임시객체가 만들어지고,


그 임시객체의 참조값이 리턴된다고 해.


그리고 그 참조값을 AAA & ref1으로 받게되면, 임시객체는 바로 소멸되지 않고 ref1으로 계속 쓸 수 있어


근데


func2 함수에서 객체가 아닌 일반 자료형 변수를 반환하는 상황에서는


똑같이 임시변수가 만들어지고, 임시변수의 참조값이 리턴되어서, cout에 값을 출력할 것 같은데


출력이 되질 않는데 왜그럴까.





Posted by huammmm1
,