鉴于这种代码,是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
的类型不完全由标准决定。
我的推理是否合法?
嗯,这是一种“完全确定”后,你咨询了你的平台的类型特征... –
这意味着它不完全确定的标准:-) – KnowItAllWannabe
换句话说,如果它*完全由该标准,那么你可以抛出整个算术转换部分,并用一个简单的矩阵代替它,告诉你实际的结果类型。你的'sum'的类型是'std :: common_type :: type',它的值是... –