> 백엔드 개발 > C++ > 본문

`i = i 1`은 C 17에서 법적으로 정의되어 있나요?

Linda Hamilton
풀어 주다: 2024-10-29 03:02:02
원래의
569명이 탐색했습니다.

 Is `i = i     1`  Legally Defined in C  17?

C 17에서 i = i 1의 합법성

C 17은 i = i 1이라는 표현을 합법화하는 미묘하지만 중요한 변화를 도입했습니다. , 이는 이전에 C 11에서 정의되지 않은 동작이었습니다.

C 17 이전

C 11에서는 할당 표현식의 평가 순서가 다음과 같이 지정되었습니다.

  • 오른쪽 및 왼쪽 피연산자의 값 계산은 실제 할당 전에 순서가 지정됩니다.
  • 그러나 할당 자체와 오른쪽의 잠재적인 부작용 사이에는 구체적인 순서 요구 사항이 없었습니다( RHS) 표현식입니다.

i = i 1;의 경우 이는 후위 연산자를 사용하여 i를 증가시키면 할당 전후에 부작용이 발생할 수 있음을 의미합니다. 이러한 시퀀싱 부족으로 인해 정의되지 않은 동작이 발생했습니다.

C 17의 변경 사항

C 17에서는 할당 연산자 사양에 추가 문장을 도입했습니다. "오른쪽 피연산자는 다음과 같습니다. 왼쪽 피연산자 앞에 시퀀스가 ​​지정됩니다." 겉보기에 무해해 보이는 이 추가는 광범위한 의미를 갖습니다.

LHS 전에 RHS의 순서를 지정함으로써 C 17은 이제 RHS의 모든 부작용이 할당 자체 전에 발생하도록 보장합니다. 이는 잠재적인 정의되지 않은 동작으로부터 할당 작업을 효과적으로 분리합니다.

예제 재작성

이 변경 사항을 설명하기 위해 i = i 1;의 평가를 분석해 보겠습니다. C 17:

  1. 오른쪽 피연산자(RHS)의 값 계산: i 1

    • 접미사를 사용하여 i를 증가시킵니다(부작용).
    • 증가된 값에 1을 더합니다.
  2. LHS 전 RHS 시퀀싱:

    • RHS의 모든 부작용(증분 포함)이 발생합니다. .
  3. 왼쪽 피연산자(LHS)의 값 계산: i

    • i의 현재 값이 사용됩니다.
  4. 할당:

    • RHS의 결과를 LHS에 할당합니다.

모든 부작용이 RHS가 할당보다 앞에 있으므로 C 17은 이러한 표현식에서 정의되지 않은 동작이 발생할 가능성을 확실히 제거합니다.

위 내용은 `i = i 1`은 C 17에서 법적으로 정의되어 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!