사전 증분 연산자가 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"라고 불리는 것은 "식의 값"으로 묘사됩니다.
그 이유를 설명해 줄 수 있기를 바랍니다.++i
C에서 r값을 반환합니다.
C++의 경우, 증가하는 개체에 따라 다릅니다.개체 유형이 일부 사용자 정의 유형이면 항상 l 값을 반환할 수 있습니다.그 말은, 당신은 항상 글을 쓸 수 있다는 것을 의미합니다.i++++++++
아니면++++++i
의 타입이라면i
가Index
여기에 정의된 바와 같이:
미리 증가된 변수를 al값으로 사용함으로써 발생할 수 있는 유용한 문장을 머릿속에서 떠올릴 수 없습니다.C++에서는 연산자 오버로드가 존재하기 때문에 가능합니다.이 제한 때문에 C에서 할 수 없는 것에 대한 구체적인 예가 있습니까?
언급URL : https://stackoverflow.com/questions/4802315/why-pre-increment-operator-gives-rvalue-in-c
'programing' 카테고리의 다른 글
WordPress와 데이터베이스 연결 설정 오류 디버그 방법 (0) | 2023.10.06 |
---|---|
발신자 기능의 이름은 어떻게 알 수 있습니까? (0) | 2023.10.06 |
C와 C++에서 "비어있는 루프"라는 용어는 정확히 무엇을 가리킵니다. (0) | 2023.10.06 |
Slick/Tomcat/MariaDB Galera 클러스터의 잘못된 "데이터베이스가 선택되지 않음" 오류 (0) | 2023.10.06 |
5초마다 AJAX jQuery 새로 고침 div (0) | 2023.10.01 |