>백엔드 개발 >C++ >왜 `cout인가?

왜 `cout인가?

Patricia Arquette
Patricia Arquette원래의
2024-12-15 14:05:17253검색

Why is `cout

정의되지 않은 동작: cout 이해 << << a

C에서는 정의되지 않은 동작의 개념을 이해하는 것이 중요합니다. 정의되지 않은 동작은 프로그램의 동작이 C 표준에 지정되지 않아 예측할 수 없는 결과를 초래하는 상황을 의미합니다.

다음 설명을 고려하세요.

cout << a++ << a;

여기서 시퀀스가 ​​있습니다. 증가 연산자( )와 삽입 연산자(<<)를 포함하는 연산입니다. 이러한 연산을 변수 a에 적용할 때 시퀀스 포인트가 없기 때문에 정의되지 않은 동작이 발생합니다.

시퀀스 포인트는 컴파일러가 모든 부작용이 발생했음을 보장하는 코드의 특정 지점입니다. 그러나 위의 설명에서는 a와 a의 평가 사이에 시퀀스 포인트가 없습니다. 이는 이러한 작업이 수행되는 순서가 표준에 지정되어 있지 않음을 의미합니다.

따라서 이 문의 출력은 구현에 따라 달라질 수 있습니다. 어떤 경우에는 출력이 "01"일 수도 있고 다른 경우에는 "10"일 수도 있습니다. 그러나 표준은 어떤 경우가 발생할지 보장하지 않으므로 동작이 정의되지 않습니다.

C 17 업데이트

C에서 표현식 평가를 관리하는 규칙에 유의하는 것이 중요합니다. C 17에서 업데이트되었습니다. C 17에서는 <<와 같은 시프트 연산자 표현식에 다음 규칙이 적용됩니다. >>:

"교대 연산자 표현식 E1<>E2에서 E1의 모든 값 계산 및 부작용은 E2의 모든 값 계산 및 부작용 이전에 순서대로 지정됩니다. ."

이 규칙은 원래 문에서 정의되지 않은 동작을 제거합니다. C 17에서는 cout << << 에이; a의 평가 이전에 a의 부작용(a 증가)이 발생하는 것이 보장되므로 항상 "01" 출력을 생성합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.