为什么以下代码片段输出3?

时间:2018-09-07 17:57:55

标签: c++

为什么下面的代码片段输出3?

// Example program
#include <iostream>
#include <string>

int main()
{
  std::cout <<    + '+'    - '-'    * '*'    / '/'  << std::endl;
}

GCC输出here. Clang的输出也一样。

1 个答案:

答案 0 :(得分:5)

所有'+''-''*''/'都是char类型-这意味着它们是整数类型并支持算术运算。这些每个都有数字表示,通过编码定义。如今在大多数情况下,编码为ASCII。在ASCII编码中,*为42,-为45,+为43,/为47。

考虑到这一点,您的代码等效于

std::cout << +43 - (45 * 42 / 47)  << std::endl;

(45 * 42 / 47)等于40时,在整数算术中显然是3。<​​/ p>