// 리턴값과레퍼런스이야기
// 값을리턴하는함수
// 1) bulit in type 의값을리턴( ex. int foo() )
// => 리턴값은상수취급된다.
// 2) user type의값을리턴( ex. Point foo() )
// => 임시객체를리턴한다.( 일부컴파일러는임시객체를상수취급하기도한다.)
int x = 10;
int& foo()
{
return x;
}
void main()
{
// int s = foo(); // 값을리턴하면10 = 30의의미를가진다.
foo() = 30; // &을리턴하면된다.
cout << x << endl;
}
//================================================
// 1. 함수가레퍼런스를리턴하는이유.
// (1) built in type의레퍼런스( int& foo() )
// => "함수호출() = 값"의표현을가능하게하기위해
// => 함수호출이lvalue에놓이기위해.
// (2) user type의레퍼런스-> 임시객체의생성을막기위해사용.
// ex) Point& foo()
struct Point
{
int x;
int y;
};
Point p = { 1, 2 };
Point& foo()
{
return p;
}
void main()
{
foo().x = 10; // user type의리턴값은상수가아니다.
cout << p.x << endl;
}