2012-12-21 1 views
0

(ISO/IEC 14882은 : 2011 (E)는)는 할당 연산자의 정의는 다음과 같습니다할당 연산자의 정의에 결함이 있습니까? 는 C++ 11 표준의 내 사본에서

간단한 과제 (=)에서, 식의 값은 대체 왼쪽 피연산자가 참조하는 개체의

"표현식의 값"대신 "오른쪽 피연산자의 값"을 사용해야하지 않습니까? 현재로서는 모호한 것처럼 보이고 "할당 표현의 가치"를 의미하는 것으로 쉽게 해석 될 수 있습니다. 왼쪽 피연산자 클래스 타입이 아닌 경우식이 암시 적으로 (제 4 항)로 변환되고,

:

어구는 "식"의 [expr.ass]의 또 다른 단락에 애매하게 사용 왼쪽 피연산자의 cv- 규정되지 않은 유형

"여기 오른쪽 피연산자"를 의미하는 것으로 생각합니까?

이것은 할당 연산자의 효과에 대한 유일한 정의이기도합니다. 내가 놓친 게 있니?

+3

할당 표현식 *의 값은 오른쪽의 값입니다. –

+0

§5.17/2 -이 문맥에서 "표현식"의 의미는 누락되었습니다. §5.17/1. – ildjarn

+0

@KerrekSB 할당 식의 값이 "왼쪽 피연산자를 나타내는 왼쪽 값"으로 정의되므로 순환 논리가됩니다. –

답변

3

은 "좌측 피연산자는"두 경우 올바른 : 대체

  1. 값은 왼쪽 피연산자 참조하는 객체이다. 오른쪽 피연산자의 값을 가져 오지만 이것은 첫 번째 인용구가 설명하는 부분이 아닙니다.
  2. 비 클래스 유형에 값을 할당 할 때 값은 오브젝트에 지정된 유형, 즉 왼쪽 피연산자로 명확하게 변환됩니다.
+0

"왼쪽 피연산자"가 아닙니다. 문제가 있습니다. "표현식"입니다. "올바른 피연산자"여야합니다. –

+0

@sftrabbit : 'operand'는 조작 대상입니다. RHS가 피연산자 일 수있는 방법은 무엇입니까? – ildjarn

+2

@ildjarn 연산자의 양 쪽은 "값이 오른쪽 및 왼쪽 피연산자의 계산 후에 할당됩니다."라는 문에서 사용 된 것처럼 해당 연산자의 피연산자입니다. –

4

표준은 흔히 독자의 편이 일부 상식으로 가정합니다.

예를 들어, 장소에서는 분명히 개체와 클래스의 개념이 서로 섞여 있습니다.

이것은 DRY 원칙에 따라 텍스트의 불필요한 중복을 통해 가독성을 줄이지 않도록하기 위해 수행되었습니다. 직접 반복하지 마십시오.

+3

_object_와 _class_를 섞으면 반복을 피할 수 있습니까?어쨌든 언어 사양의 주된 장점은 반복을 피하지 않고 모호함을 피하는 것입니다. – jogojapan

+0

그것이 잘못되었다는 것이 내 상식입니다. 그게 내가 다른 것을 놓치고 있는지 궁금해하는 이유입니다. 아마도 표준에서 더 정의되어 있습니다. 제가 아니라면, 그것은 결함입니다. 국제 표준은 나쁘게 말하면 안됩니다. –

+1

@ jogojapan : 예, 예 "클래스 유형의 객체 및 가장 파생 된 유형의 멤버 함수"대신 "객체 및 해당 멤버 함수"에 대해 논의 할 때. 공식적으로 물론 객체에는 멤버 함수가 없습니다. – MSalters

관련 문제