728x90
반응형

lvalue 3

[C++] 객체와 값

우리는 이름이 없는 객체를 할당하고 사용할 수 있다. (eg. new를 사용하여 생성) 이상하게 보이는 표현식에 할당하는 것도 가능하다. . 이것은 대상에 대한 가장 단순하고 기본적인 개념이다. 즉, 객체는 연속적인 저장 영역이다. lvalue는 객체를 참조하는 표현식이다. "lvalue"라는 단어는 원래 '할당의 왼쪽에 있을 수 있는 것'을 의미하기 위해 만들어졌다. 그러나 모든 lvalue가 할당의 왼쪽에 사용될 수 있는 것은 아니다. lvalue 유형과 선언은 상수를 참조할 수 있다. const로 선언되지 않은 lvalue는 종종 수정 가능한 lvalue라고 한다. 객체에 대한 단순하고 낮은 수준의 이 개념은 클래스 객체 및 다형성 유형의 객체 개념과 혼동되어서는 안 된다. Lvalues and R..

[C++] values

C에서의 Rvalue, Lvalue는 좌측 값은 대입(assignment) 시에 왼쪽 혹은 오른쪽에 오는 식(expression)이고, 우측 값은 대입 시에 오직 오른쪽에만 오는 식이다.라고 정의하고 있지만 C++에서는 다음과 같이 정의하고 있다. 좌측 값은 어떠한 메모리 위치를 가리키는데, & 연산자를 통해 그 위치를 참조할 수 있다. 우측 값은 좌측 값이 아닌 값들이다. C++11부터는 prvalue, xvalue, glvalue가 추가되었다. C++11에서는 이러한 value들을 다음과 같이 나누었다. lvalue : identity를 가지면서 move 될 수 없는 표현식 xvalue : identity를 가지면서 move 될 수 있는 표현식 prvalue : identity를 가지지 않고 있으면서..

[C++] std::move

template constexpr typename std::remove_reference::type&& move(T&& t) noexcept; std::move는 C++11에 도입된 개념으로 t가 가지고 있는 자원을 다른 객체에게 효율적으로 전달하는 것을 의미한다. std::move는 이동을 수행하지는 않는다. 이동될 수 있음을 알려주는 역할만 한다. std::move 된 객체를 함수에 전달한다면, 우측 값 레퍼런스를 인자로 받는 함수 (이동 생성자, 이동 대입 연산자, push_back 등)가 오버 로딩되어서 선택된다. 참고로 우측 값 레퍼런스 자체는 lvalue이기 대문에, 이동 생성자나 이동 대입 연산자 내부에서 std::move를 호출하는 경우가 많다. // 이동 생성자 A(A&& arg) : m..

728x90
반응형