c++ 11의 사용 소감 (2) - 오른쪽 참조

2208 단어
C++11에서는 다른 사람이 코드를 쓰는 것을 볼 때 다음과 같은 함수 설명이 있을 수 있습니다.
template;
void RigisterFunc(FuncType&& func);

이 코드를 보면 이전에 C++11을 사용하지 않은 사람이 순간 멍해질 수 있습니다. 이 & & 기호는 무슨 뜻입니까?이것은 논리와 연산이 아닐 것이다. 인터넷에서 검색한 후에 이 오른쪽 값 인용 연산자라는 것을 알게 되었다. 이것은 C++11이 도입하기 시작한 메커니즘이다.그러나 아마도 많은 사람들이 인코딩하는 과정에서 습관과 경험을 바탕으로 코드를 썼을 것이다. 왼쪽 값과 오른쪽 값이라는 기본적인 개념에 대해 의식이나 개념이 없다.먼저 두 개념을 살펴보겠습니다.
왼쪽 값: 표현식이 끝난 후에도 존재하는 지속성 대상을 가리키며 값 연산자의 왼쪽이나 오른쪽에 나타나는 표현식으로 주소 찾기 작업을 할 수 있다. 즉, 표현식 전에 & 기호를 붙일 수 있다.
오른쪽 값: 표현식이 끝난 후에 다시 존재하지 않는 임시 대상을 가리키며 부치 연산자 오른쪽에만 나타나는 표현식으로 주소 찾기 작업을 할 수 없습니다.다음과 같습니다.
int a = 1;     //a    
int b = a;     //a b     
a = b;         //a b     
int* p = &a;   //          

a = a*b;       //a    ,a*b    
a*b = a;       //      ,a*b     ,        
2 = b;         //      ,       ,        
int* p1 = &2;  //      ,              

상술한 개념과 예에서 볼 수 있는 왼쪽값과 오른쪽값은 두 가지 다른 것이다.그러나 진정한 인코딩 과정에서 이 두 개념은 모두 경험을 통해 구분되기 때문에 이것이 왼쪽 값인지 오른쪽 값인지 직접적으로 주목하는 사람은 드물다.그래서 오른쪽 인용을 언급할 때 어떤 사람들은 바로 멍청해졌다. 오른쪽 인용은 무엇입니까? 오른쪽 인용은 또 무엇입니까? 오른쪽 인용의 작용은 무엇입니까?
이상의 개념 설명에서 오른쪽 값에 대해 간단한 설명을 했다.그러면 오른쪽 값 인용은 오른쪽 값의 인용으로 간단하게 이해하고 왼쪽 값 인용과 같다.오른쪽 값 인용의 역할은 이동의 의미를 실현하기 위한 것이다.C++에서 C++는 한 개의 반환 값만 있고 여러 개의 반환 값을 반환하려면 비교적 복잡하다.일반적으로 사용되는 두 가지 방법은 다음과 같습니다.
1. 함수의 정의에서 여러 매개 변수의 인용을 전송하여 작업이 끝난 후에 인용의 값을 수정하여 여러 결과를 되돌려주는 효과를 얻는다.이런 인터페이스 설계는 인터페이스 확장에서 상대적으로 복잡하다. 인터페이스에 파라미터를 추가해야 할 뿐만 아니라 호출 함수의 곳곳을 수정해야 한다. 작업량이 많고 인터페이스 파라미터가 비교적 많을 때 함수 성명 자체가 군더더기가 된다.
2. 구조체나 클래스를 정의하여 봉인하면 장래의 사용에서 인터페이스를 수정하려면 되돌아오는 클래스나 구조에서 수정하고 구성원을 삭제하며 실현 함수를 수정하면 된다.그러나 되돌아오는 과정에서 임시 대상이 발생하여 추가 소모를 초래하여 성능 문제를 일으킨다(그러나 현재 컴퓨터의 성능이 비교적 높기 때문에 특수하지 않은 상황에서 이 성능 손실은 감당할 수 있다. 이 사용 방안은 첫 번째 방안 때문에)
그러나 임시 대상을 대량으로 사용하면 대량의 성능 손실을 초래할 수 있다.기계의 성능은 비교적 높지만 임시 대상의 되돌아오는 복사본이 여러 군데 존재하거나 대량으로 존재하면 성능도 너무 소모될 수 있다.이러한 임시 대상 복사를 해결하기 위해 C++11에 오른쪽 값 인용을 추가하여 이동의 의미를 해결하고 과도한 복사 구조로 인한 성능 손실을 피하기 위한 것이다.예를 들어 STL의 모브는 오른쪽 값 인용을 사용했다.
오른쪽 값에 대한 자세한 내용은 다음 두 주소를 참조하십시오.
http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html
http://thbecker.net/articles/rvalue_references/section_01.html

좋은 웹페이지 즐겨찾기