8

鉴于此代码,

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上面的类型并没有完全由标准决定。

我的推理合理吗?

4

1 回答 1

0

该类型是特定于实现的,但不是实现定义的。实现定义意味着实现必须记录它所做的事情。

于 2013-05-27T20:02:06.663 回答