是无符号short + int实现定义的类型吗?

时间:2013-05-26 22:48:50

标签: c++ c++11

鉴于此代码,

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可以表示unsigned short中的所有值,则unsigned short将转换为int,sum的类型为int。
  • 5/9 bullet 5 subbullet 5表示如果int不能表示unsigned short中的所有值,则两个操作数都将转换为unsigned int,sum的类型为unsigned int。

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

我的推理合法吗?

1 个答案:

答案 0 :(得分:0)

类型是特定于实现的,但不是实现定义的。实现定义意味着实现必须记录它的作用。