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

Kno*_*abe 8 c++ c++11

鉴于此代码,

unsigned short us = 0; 
int i = 0;
auto sum = us + i;
Run Code Online (Sandbox Code Playgroud)

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

我的推理合法吗?

Pet*_*ker 0

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