2013-05-26 31 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的等级大于无符号短的等级。
  • 5/9 bullet 5 subbullet 4表示如果int可以表示无符号短整型的所有值,则将无符号短整型转换为int,并且sum的类型为int。
  • 5/9 bullet 5 subbullet 5表示如果int无法表示无符号短整型中的所有值,则两个操作数都转换为无符号整型,并且sum的类型为unsigned int。

如果上述分析是合法的,则意味着使用auto来声明使用内置类型的算术表达式初始化的变量可能导致实现定义的结果。我猜这会让很多程序员感到惊讶,以上sum的类型不完全由标准决定。

我的推理是否合法?

+1

嗯,这是一种“完全确定”后,你咨询了你的平台的类型特征... –

+0

这意味着它不完全确定的标准:-) – KnowItAllWannabe

+2

换句话说,如果它*完全由该标准,那么你可以抛出整个算术转换部分,并用一个简单的矩阵代替它,告诉你实际的结果类型。你的'sum'的类型是'std :: common_type :: type',它的值是... –

回答

0

该类型是特定于实现的,但未实现定义。实现定义意味着实现必须记录它的功能。

+0

我接受这个答案,但我鼓励读者查看关于原始问题的意见以获取更多信息。 – KnowItAllWannabe

+0

标准关于实施定义行为的规范对于任何必需的文档必须采取的形式以及它的具体含义都比较模糊。指定'int'和'unsigned short'范围(如标准所要求的)的实现将指示涉及这些类型的操作必须如何操作。 – supercat

相关问题