2013-05-26 2 views
8
이 코드를 감안할 때

,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 유형이 표준에 의해 완전히 결정되지 않은 것은 많은 프로그래머를 놀라게 할 것이라고 추측합니다.

제 논리가 합법적입니까?

+1

글쎄, 그것은 * * 완전히에 의해 결정된다면 완전히, 달리 말하면 표준 :-) –

+0

... 당신은 당신의 플랫폼의 유형 특성에 문의 후 "완전히 결정"의 일종 표준을 사용하면 산술 변환에 대한 전체 섹션을 버리고 실제 결과 유형을 알려주는 간단한 매트릭스로 바꿀 수 있습니다. 귀하의'sum' 타입의'std :: common_type :: type'은 가치가 무엇인지에 대한 것입니다 ... – KnowItAllWannabe

+2

에 의해 결정 아니에요 의미합니다 –

답변

0

유형은 구현에 따라 다르지만 구현 정의에 따라 다릅니다. 구현 정의는 구현시 수행해야 할 내용을 문서화해야 함을 의미합니다.

+0

답변으로 받아들이 겠지만 독자는 원본 질문에 대한 의견을 추가 정보로 확인하는 것이 좋습니다. – KnowItAllWannabe

+0

Impleentation-Defined 행동에 대한 Standard의 사양은 필요한 문서가 취해야하는 양식과 그것이 얼마나 구체적이어야하는지에 대해 다소 모호합니다. 표준에서 요구하는대로 'int'와 'unsigned short'의 범위를 지정하는 구현은 이러한 유형을 포함하는 연산이 어떻게 작동해야 하는지를 나타냅니다. – supercat

관련 문제