정의되지 않은 동작 아니요. 심지어 구현은 또는 으로 정의되지 않았습니다.입니다. (세 용어는 모두 다른 것입니다.)
이 두 줄은 모두 잘 정의되어 있지만 다른 것들을 수행합니다.
*++p1 = *p2++;
가
_T1* _p1 = ++p1;
T2_* p2_ = p2++;
*_p1 = *p2_;
그리고
++*p1 = *p2++;
동등하면
T1& x = *p1;
__T1_& y = ++x;
T2_* p2_ = p2++;
y = *p2_;
동등 691,363,210
T1&
는 즉 모든 T1/_T1/__T1_/T2_
은,
__T1_&
++(*p1)
표현의 유형이,
_T1*
++p1
표현의 유형,
T2_*
p2++
표현의 유형이있다, *p1
표현의 유형 귀하의 경우에는 char
입니다.
++x
이후 귀하의 경우 x
및 y
에 x
에 반환 참조있는 동일한 참조 (*p1
즉) (C++ 기본 유형) -하지만 T1
일부 사용자 정의 유형 될 경우이 사건되지 않을 수도 있습니다 과부하로 operator++()
.
ADD :
는 분명히 값을 증가하고 완전히 무의미에 다음 할당합니다.
예 - 다른 사람들이 이미 말한 것처럼 코드에 대한 질문이 있습니다. 당신에게 명확하고 독자들에게 명확해야 할 것을 적어 두십시오.
ADD2 :
분쟁 점을 명확히하기 위해 나는 표준을 인용하겠습니다.
ISO/IEC 14882-2003 5.3.2 :
- 프리픽스의 피연산자 ++ 1을 추가하여 수정하거나, 그 BOOL 경우 (이러한 사용은 중단된다)를 true로 설정. 피연산자는 수정 가능 숫자 이어야합니다. 피연산자의 유형은 산술 형이거나 완전히 정의 된 객체 유형을 가리키는 포인터이어야한다. 값은 새로운 피연산자 값입니다. 그것은 lvalue입니다. x가 bool 유형이 아닌 경우 표현식 ++ x는 x + = 1과 같습니다.
나는 모든 사람들이 아침 그룹화에 대한 질문을 왜 궁금해 임의의'++','*'와'='하나 끔찍하게 복잡하고 어려운 읽기 라인 ... – ereOn
에 당신은 시도해야하는 경우 코드가 끔찍하게 폭발할지, 아니면 묵시록을 일으킬 지 여부를 알아 내고 ** 사용하지 마십시오. 그것이 얼마나 잘 정의되어 있는지에 관계없이, * 좋은 코드가 아닙니다 *. – ssube
읽기 쉽고 투명하지 않은 경우 괜찮지 않습니다. – maligree