,unsigned short + int 유형이 구현 정의입니까?
unsigned short us = 0;
int i = 0;
auto sum = us + i;
는 sum
구현 정의의 유형입니까? 는 C++ 11 표준의 나의 독서는 예 말한다 :
- 5.7/1은 일반적인 산술 변환이 적용되는 것을 말한다.
- 4.13/1 글 머리 기호 2와 3은 int의 순위가 부호없는 short의 순위보다 큼다고 말합니다.
- 5/9 bullet 5 subbullet 4는 int가 부호없는 short의 모든 값을 나타낼 수있는 경우 부호없는 short가 int로 변환되고
sum
의 형식이 int임을 나타냅니다. - 5/9 bullet 5 subbullet 5는 int가 부호없는 short의 모든 값을 나타낼 수없는 경우 양쪽 피연산자가 unsigned int로 변환되고
sum
의 형식이 unsigned int임을 나타냅니다. 상기 분석은 정상적인 경우
, 그것은 auto
을 사용하여 구현 정의 결과가 발생할 수있는 내장 유형의 연산 식으로 초기화 변수를 선언하는 것을 의미한다. 위의 sum
유형이 표준에 의해 완전히 결정되지 않은 것은 많은 프로그래머를 놀라게 할 것이라고 추측합니다.
제 논리가 합법적입니까?
글쎄, 그것은 * * 완전히에 의해 결정된다면 완전히, 달리 말하면 표준 :-) –
... 당신은 당신의 플랫폼의 유형 특성에 문의 후 "완전히 결정"의 일종 표준을 사용하면 산술 변환에 대한 전체 섹션을 버리고 실제 결과 유형을 알려주는 간단한 매트릭스로 바꿀 수 있습니다. 귀하의'sum' 타입의'std :: common_type :: type'은 가치가 무엇인지에 대한 것입니다 ... –
KnowItAllWannabe
에 의해 결정 아니에요 의미합니다 –