C 할당 문의 평가 순서
C에서 맵에 값을 할당할 때 평가 순서가 직관에 반하는 결과를 초래할 수 있습니다. 다음 코드를 고려해보세요:
map<int, int> mp;<br>printf("%d ", mp.size());<br>mp[10]=mp.size();<br>printf("%dn", mp[10]);<br>
이 코드는 0과 1을 인쇄하지만 0과 0이 나올 것으로 예상할 수도 있습니다. 그 이유는 다음과 같습니다.
지정되지 않은 동작
이 특정 동작은 C 표준에서 지정되지 않습니다. 그러나 최근 제안(N4228)에서는 이러한 경우 평가 순서를 명확히 하려고 합니다.
수정된 제안의 [expr.ass]p1 섹션에는 다음과 같이 명시되어 있습니다.
"올바른 피연산자는 다음과 같습니다. 왼쪽 피연산자 앞에 시퀀스가 지정됩니다."
이는 위의 예에서 mp.size()가 mp[10]보다 먼저 평가되어 예상 출력이 0과 0이 된다는 의미입니다.
업데이트
C 17에서 이 동작은 제안 p0145의 개정 3에 따라 표준에 지정되었다는 점에 유의하는 것이 중요합니다. 이제 오른쪽 피연산자는 대입문에서 왼쪽 피연산자 앞에 명시적으로 순서가 지정됩니다.
위 내용은 C에서 맵 값을 할당하면 예기치 않은 결과가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!