鉴于此代码,
unsigned short us = 0;
int i = 0;
auto sum = us + i;
实现的类型是sum
定义的吗?我对 C++11 标准的阅读说是的:
- 5.7/1 表示应用了通常的算术转换。
- 4.13/1 项目符号 2 和 3 说 int 的秩大于 unsigned short 的秩。
- 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
上面的类型并没有完全由标准决定。
我的推理合理吗?