rValue, lValue

1746 ワード

#include <iostream>
using namespace std;


int func1()
{
	return 1;
}

int& func2()
{
	int x = 2;
	return x;
}

class Object
{
public : 
	Object() { cout << "constr" << endl; }
	Object(const Object& other) { cout << "copy constr" << endl; }
	~Object() { cout << "destru" << endl; }

};

Object& result()
{
	Object a;
	return a;
}
//=> 참조를 반환하는 것이지만, 실행 결과를 확인해보면, 
// Object obj = result(); 여기서 복사본이 생기는 것을 확인할 수 있음 
// 객체의 반환의 경우, 필수적으로 복사를 가지고 옴. : 임시 객체
// rValue는 상수가 아님.

int main()
{
	int a = 5;

	//func1() = 5;
	func2() = 5;

	// 임시객체 ? : 컴파일러에 의해 생성되는 객체로, 
	Object obj = result();

	Object obj2;
	result() = obj2;
    
    cout << "end" << endl;
}


戻り領域オブジェクトが参照として返されるか、値として返されるか.
一時オブジェクトを作成します.

Rvalue , lValue


:Rvalueの参照のみを受け入れる
2つの参照を使用します.
Rvalue
  • 定数/テキスト値.
  • 一時オブジェクト
  • アドレスはありません.
  • は、
  • (一時オブジェクト)
  • を返します.
    LValue
  • アドレスを持っています.
  • は、
  • 参照を返します.時によって違う.
  • 参照のタイプ


    1.一般参照(LValue)



    2. const ref



    3. rValue ref



    rValue Ref