为什么下面的代码片段输出3?
// Example program
#include <iostream>
#include <string>
int main()
{
std::cout << + '+' - '-' * '*' / '/' << std::endl;
}
GCC输出here. Clang的输出也一样。
答案 0 :(得分:5)
所有'+'
,'-'
,'*'
和'/'
都是char
类型-这意味着它们是整数类型并支持算术运算。这些每个都有数字表示,通过编码定义。如今在大多数情况下,编码为ASCII
。在ASCII编码中,*
为42,-
为45,+
为43,/
为47。
考虑到这一点,您的代码等效于
std::cout << +43 - (45 * 42 / 47) << std::endl;
当(45 * 42 / 47)
等于40时,在整数算术中显然是3。</ p>