假设我有一个由单个字符串组成的文件
a1
如果我这样写:
char ch = getchar();
char ch1 = getchar();
cout << ch - 'a' << " " << ch1 - '0' << endl;
我在输出中有 0 1
。但是如果我这样写:
cout << getchar() - 'a' << " " << getchar() - '0' << endl;
我有 -48 49
。
getchar() 不返回一个普通的字符吗?为什么结果不一样?
最佳答案
您遇到问题是因为对 getchar()
的两次调用以未指定的顺序求值,您的编译器恰好首先求值最右边的一个。
C++ 对于表达式中子表达式的求值顺序有相当宽松的规则,以提供更多的优化机会。 cout
line 是一个表达式,其中保证以下内容:
- 第一个
getchar()
将在第一个-
之前进行评估 - 第二个
getchar()
将在第二次之前进行评估-
- 第一个
-
将在第一个<<
之前进行评估 - 第二个
-
将在第三次之前进行评估<<
<<
s 将从左开始计算。
请注意,没有其他订购限制。例如,编译器可以自由评估 getchar()
电话和两个-
s 在第一个 <<
之前.最重要的是,没有规则强制第一个 getchar()
在第二个之前进行评估。
关于c++ - 替换 getchar 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27324729/