2014-12-09 3 views
-4

이 두 가지가 어떻게 다른지 말해 줄 수 있습니까?두 코드 간의 차이점은 무엇입니까?

int i = + +0; 

int i = ++0; // compiler error 

감사합니다.

+4

첫 번째 줄에는 두 개의 덧셈 사이에 공백이 있지만 두 번째 줄에는 공백이 없습니다. –

답변

6

첫 번째 문자는 첫 번째 +과 두 번째 문자 인 + 사이에 공백이 있습니다. 두 번째 문자는 공백 문자가 아닙니다.

이것은 단항 접두어 연산자 +의 두 인스턴스로 구문 분석하는 반면, 후자는 단항 접두어 연산자 ++ (물론 리터럴에 적용 할 수 없음)으로 구문 분석한다는 것을 의미합니다.

+0

@KerrekSB'++ '가 리터럴에 적용되지 않고 수정 가능한 리터럴의 존재를 암시하지 않는 이유를 지적하고자했습니다. 하지만 선명도를 높이기 위해 그것을 제거했습니다. – unwind

+0

나는 class-type 값을 가진 사용자 정의 리터럴을 정의하고 그것에 대한 연산자를 오버로드하려고한다. –

0

이 선언에는 두 개의 다른 연산자가 사용됩니다.

첫 번째 선언에는 단항 더하기 연산자가 두 번 사용됩니다. 내장 유형의 경우 승격 된 피연산자의 값만 반환합니다. 그래서 실제로는 더 당신은 심지어

int i = + + + + + +0; 

쓸 수 있지만, 결과가 변경되지 않을 것이다

int i = 0; 

int i = + +0; 

가 동등이 선언 어떤 의미가 없습니다. :)

두 번째 선언에는 단항 접미사 증가 연산자 ++가 사용됩니다. 그것은 rvalues에 적용되지 않을 수 있습니다. 따라서 컴파일러는 오류를 발생시킵니다.

하나 이상의 dclaration을 추가하면 선언이 컴파일됩니다. 예 :

int j = 0; 
int i = ++j; 

이 경우 lvalue j가 증가 할 수 있습니다. 이니셜 라이저 표현식의 결과는 1과 같습니다. 즉 1로 초기화되고 물론 j 자체도 1과 같습니다.

예를 들어 짝수 개의 위의 예제에서 j 앞에 pluses. 예 :

int j = 0; 
int i = ++++++++++++j; 

그러나 j 뒤에 한 쌍의 pluses 만 사용할 수 있습니다. 계정으로 예를 들어

int j = 0; 
int i = j++++; // compilation error. 

그러나 또 다른 질문입니다. :)

가지고 그

왼쪽 오른쪽 단항 연산자 그룹과 식 (C++ 표준)

1

및 접두사 증가 연산자 ++ 및 단항 더하기 연산자는 모두 단항 연산자입니다.

관련 문제