"cout << a << a"의 수수께끼 풀기: 정의되지 않은 행동인가, 예정된 01인가?
In 최근 인터뷰, 수수께끼의 코딩 수수께끼 표면:
int a = 0; cout << a++ << a;
10, 01 등 선택할 수 있는 유혹적인 옵션과 신비한 "정의되지 않은 동작"으로 인터뷰 대상자는 시퀀스 포인트에 대한 이해를 언급하며 자신있게 01을 선택했습니다. 그러나 면접관의 반응은 매우 놀랐습니다. 정답은 놀랍게도 정의되지 않았습니다.
정의되지 않은 영역 탐색
시퀀스 포인트는 일반적으로 이전에 부작용이 완료되는 것을 보장합니다. 후속 평가로 넘어갑니다. 흥미롭게도 문제의 진술에는 논증 평가 사이에 어떤 순서 지점도 없습니다. 이는 인수 "a"가 인수 "cout << a" 앞이나 뒤에 계산될 수 있음을 의미합니다. 이러한 모호함은 결과를 예측할 수 없게 만들고 따라서 정의되지 않은 동작으로 간주됩니다.
A Ray of Hope in C 17
코딩 환경이 C 17에서 변형되었습니다. 표현식 평가에 적용되는 규칙이 개정되었습니다. 최신 지침은 시프트 연산자 표현식에서 첫 번째 인수("E1")의 모든 계산과 부작용이 두 번째 인수("E2")보다 먼저 순서화되도록 명시적으로 규정합니다.
이 중요한 조정에서는 문제의 코드 조각을 출력 01로 보냅니다. 파악하기 어려운 정의되지 않은 동작이 제거되고 미리 결정된 확실성으로 대체되었습니다.
P0145R3의 불씨에 대한 심층 분석
보다 포괄적인 이해를 원하는 사람들을 위해 기술 문서 P0145R3: 관용적 C에 대한 표현식 평가 순서 개선에서 다음 내용을 자세히 설명합니다. 수정된 표현식 평가 순서의 복잡한 세부 사항을 통해 C 코딩의 진화에 대한 심오한 통찰력을 제공합니다. 패러다임.
위 내용은 'cout인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!