2013-07-08 2 views
0

C++ 표준 라이브러리에는 쌍이라고하는 개체가 있습니다. Pair.first 및 Pair.second는 각각 쌍 객체의 첫 번째 및 두 번째 값을 각각 반환합니다. 조건부로 첫 번째 값을 1 씩 증가시키고 싶습니다 (내 쌍은 한 쌍입니다). 이 작업을 수행하려고하면 "1 가치가 필요합니다"라는 메시지가 표시됩니다. 이것은 참조에 의한 값을 전달하지 않는 어딘가에 있기 때문일 수 있습니다. 그러나 .first는 참조에 의해 쌍의 첫 번째 값을 반환하지 않을 수도 있습니다. 만약 그렇다면 누군가 알 수 있습니까?pair.first가 첫 번째 값에 대한 참조를 반환합니까?

+2

문제가있는 * 최소 * 코드를 보여주십시오. 당신이 그것을 묘사하는 방식으로 작동해야합니다 (그러나 그렇게하지는 않습니다. 그래서 비린내가 있습니다). – syam

답변

5

first은 함수가 아니며, 객체 자체 인 struct pair의 데이터 멤버입니다. 객체의 이름은 lvalue이며 참조와 같습니다.

"Lvalue"는 과제의 왼쪽에 갈 수있는 것을 나타내는 언어 용어로, 값을 할당하거나 메모리에 의미있는 주소가 있습니다.

두 조건이 모두 같은 유형의 lvalue 인 경우 조건부 표현식의 결과는 왼쪽 값입니다. 예를 들어

,

pair< int, int > p; 
flag? p.first : p.second = 34; // ok 

flag? p.first : 3 = 15; // error: 3 is not an lvalue; 3 = 15 is nonsense 

pair< int, short > q; 
flag? q.first : q.second = 12; // error: different types 

주 "좌변"의 반대는 할당의 우측은 "r- 수치"이다. 이 용어는 C 언어에서 빌려온 용어입니다.

기억 : 표현식의 lvalue는 저장되는 곳이며, rvalue는 내용입니다. 다음 표현 중 의미가있는 것은 값 카테고리입니다. 우선 들어

1

, 나는 당신이 "1-값이 필요합니다"실제로으로 읽는 것은 (직관적) 실제 개체를 오히려 나타내는 표현이다 C++에서 (L 값), "좌변이 필요합니다"라고 생각 가치있는 것보다.

다음, pair.firstpair.secondpair.firstpair.second에 대한 참조를 양보하지 않는, 오히려 pair의 내부firstsecond 데이터 멤버입니다. 그들에 대한 참조를 얻을 수는 있지만 참조 자체는 아닙니다.

실제 코드를 보지 않고도 더 이상 구체적인 조언을 제공 할 수 없습니다.

희망이 도움이됩니다.

+4

쌍은 1 값에서 2 값으로의 변환을 구현하는 표준 방법입니다. –

관련 문제