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

왜 코드는 `cout

Mary-Kate Olsen
풀어 주다: 2024-11-05 17:20:02
원래의
970명이 탐색했습니다.

Why does the code `cout

C의 후위 증가 및 출력 동작

이 문서에서는 출력 스트림의 컨텍스트 내에서 C의 후위 증가 연산자의 동작을 살펴봅니다. 경우에 따라 사후 증분 작업으로 인해 예상치 못한 결과가 발생할 수 있습니다.

문제

다음 코드 조각을 고려하세요.

<code class="cpp">#include <iostream>
using namespace std;

main() {
    int i = 5;

    cout << i++ << i-- << ++i << --i << i << endl;
}</code>
로그인 후 복사

이 코드는 다음을 출력합니다. 언뜻 보면 놀랍게 보일 수 있는 시퀀스 "45555"입니다. 사후 증가 연산자(i )는 변수가 표현식에 사용된 후 변수 값을 증가시켜 첫 번째 출력에서 ​​결과 "4"를 얻습니다. 그러나 다음 사후 감소 연산자(i--)는 변수를 즉시 원래 값으로 감소시켜 두 번째 출력으로 "5"를 반환합니다. 동일한 패턴이 계속되어 변수 값이 증가했다가 두 번 더 감소하여 최종 출력이 "555"가 됩니다.

포스트 증분 이해

포스트 C의 증가 연산자는 변수가 표현식에 사용된 후 변수의 값을 증가시키는 단항 연산자입니다. 즉, 연산자가 적용된 후 변수 값이 1씩 증가합니다. 위의 코드 조각에서 사후 증가 연산자(i )는 변수가 출력 스트림(cout << i)에서 사용된 후에 사용됩니다.

인수에 대한 비순차 평가

단일 표현식 내에서 여러 사후 증가/감소 연산의 동작은 인수에 대한 비순차적 평가를 따릅니다. 이는 연산자의 인수가 평가되는 순서가 C 표준에 의해 지정되지 않음을 의미합니다. 결과적으로 이러한 표현식의 출력은 정의되지 않으며 컴파일러의 특정 구현에 따라 달라질 수 있습니다.

정의되지 않은 동작

코드 조각의 경우 단, 사후 증가 및 사후 감소 연산자의 평가 순서는 정의되지 않습니다. 이로 인해 예상치 못한 예측할 수 없는 결과가 발생합니다. 이러한 코드는 정의되지 않은 동작을 나타냅니다. 즉, 컴퓨터에 불을 붙이는 것(농담)을 포함하여 컴파일러가 적합하다고 판단하는 모든 출력을 자유롭게 생성할 수 있습니다.

정의되지 않은 동작을 피하세요

정의되지 않은 동작을 보이는 코드를 작성하지 않는 것이 중요합니다. 일관되지 않고 신뢰할 수 없는 결과를 초래할 수 있기 때문입니다. 사후 증가/감소 연산자를 사용할 때 정의되지 않은 동작을 방지하려면 연산자 사이에 시퀀스 포인트가 있는지 확인하십시오. 시퀀스 포인트는 다음 표현식이 평가를 시작하기 전에 이전 표현식의 모든 부작용이 완료되는 코드의 지점입니다.

위 내용은 왜 코드는 `cout의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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