programing

사전 증분 연산자가 r값을 C로 제공하는 이유는 무엇입니까?

oldcodes 2023. 10. 6. 21:58
반응형

사전 증분 연산자가 r값을 C로 제공하는 이유는 무엇입니까?

C++에서 사전 증분 연산자는 복사본이 아니라 증분 개체 자체가 반환되기 때문에 l 값을 제공합니다.하지만 C에서는 r값을 줍니다. 왜죠?

C는 레퍼런스가 없습니다.인 C++++i참조를 반환합니다.i(lvalue)인 반면 C에서는 복사본(증분)을 반환합니다.

C99 6.5.3.1/2

이전 fix ++ 연산자의 피연산자 값이 증가합니다.결과적으로 증분 피연산자의 값이 됩니다.식 ++E는 (E+=1)과 같습니다.

‘‘value of an expression’’ <=> rvalue

하지만 역사적인 이유로 "C의 일부가 아닌 참조"가 가능한 이유가 될 수 있다고 생각합니다.

C99는 (6.3.2.1절의) 각주에서 다음과 같이 말하고 있습니다.

"l value"라는 이름은 원래 할당식 E1 = E2에서 비롯되며, 여기서 왼쪽 피연산자 E1은 (modifi 가능한) l 값이어야 합니다.개체 "locator value"를 나타내는 것으로 더 잘 고려될 수 있습니다.이 국제 표준에서 "rvalue"라고 불리는 것은 "식의 "으로 묘사됩니다.

그 이유를 설명해 줄 수 있기를 바랍니다.++iC에서 r값을 반환합니다.


C++의 경우, 증가하는 개체에 따라 다릅니다.개체 유형이 일부 사용자 정의 유형이면 항상 l 값을 반환할 수 있습니다.그 말은, 당신은 항상 글을 쓸 수 있다는 것을 의미합니다.i++++++++아니면++++++i의 타입이라면iIndex여기에 정의된 바와 같이:

정의되지 않은 동작 및 시퀀스 지점이 다시 로드됨

미리 증가된 변수를 al값으로 사용함으로써 발생할 수 있는 유용한 문장을 머릿속에서 떠올릴 수 없습니다.C++에서는 연산자 오버로드가 존재하기 때문에 가능합니다.이 제한 때문에 C에서 할 수 없는 것에 대한 구체적인 예가 있습니까?

언급URL : https://stackoverflow.com/questions/4802315/why-pre-increment-operator-gives-rvalue-in-c

반응형