扩展和缩小C / C ++中的规则

时间:2016-11-30 14:38:25

标签: c++ standards

我试图通过C / C ++标准来阅读,但我无法找到答案。

假设您有以下代码段:

int8_t m;
int64_t n;

而且在某些时候你执行m + n,添加本身就是一个二元运算符,我认为最有可能认为在这种情况下发生的是:

  1. m到相同大小的n,调用扩展结果m_prime
  2. 执行m_prime + n
  3. 返回int64_t
  4. 类型的结果

    我试图理解,如果不是执行m+n我执行了n+m,结果会改变(因为可能会有缩小操作而不是扩大操作)。

    我找不到澄清这一点的标准部分(我明白这听起来很简单)。

    有人能指出我在标准中可以找到的地方吗?或者在我暴露的情况下会发生什么?

    就我个人而言,我一直在关注"添加剂运营商"但是在我看来并不能解释会发生什么,指针算法有点覆盖,但没有提到隐式应用的某些强制规则。

    你可以假设我在谈论C ++ 11,但我认为任何其他标准都适用相同的规则。

1 个答案:

答案 0 :(得分:2)

见第5章表达式[expr]。第10点开始

  

许多期望算术或枚举类型操作数的二元运算符会以类似的方式导致转换并产生结果类型。目的是产生普通类型,这也是结果的类型。这种模式称为通常的算术转换,定义如下:

接下来的子点说"如果 操作数是......"," ... 其他应该......","如果两个操作数......"等

有关具体示例,请参阅10.5.2

  

否则,如果两个操作数都有有符号整数类型或两者都有无符号整数类型,则具有较小整数转换等级类型的操作数应转换为具有更高等级的操作数的类型。