c++ - 知道为什么下面的代码片段打印 2 而不是 3

标签 c++ c if-statement post-increment

<分区>

我原以为此代码片段会打印 3,因为 if 条件为假,y++ 将执行,但它会打印 2,不知道为什么……谢谢!!

int x = 3;
int y = 2;

printf("%d\n", (x<y) ? x++ : y++);

//这会打印 2

最佳答案

x++y++ 是后递增的。也就是说,它们返回变量的当前值,然后将其加一。

预增量为++x++y。这些递增然后返回新值。

前递增和后递增(和递减)在编写循环控件时都是有用的东西,这就是为什么 C 支持两者。

(本来,如果我没记错的话,C只支持前自增和后自减,因为它开发的机器上恰好有指令封装了这些行为。但是随着C转移到其他系统,并且随着人们开始注意到他们想要两者的前和后,这是普遍的。)

请注意,这意味着 c++ 语言被错误命名。它应该被称为 ++c -- 我们希望在我们使用它之前对其进行改进,而不是之后!

关于c++ - 知道为什么下面的代码片段打印 2 而不是 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21896835/

相关文章:

c - 打印二维数组 `*((*arr+(i*3))+j)` 时 `arr` 如何工作?

c - 使用 C 和 Windows 从混音器录制声音

java - 使用用户输入迭代 While 循环

Java if-else条件改变输出颜色

c++ - 错误 : LNK2001: unresolved external symbol "private: static class

c++ - 众所周知的虚拟文件夹 GUID 是什么?

c - 使用默认(私有(private))子句时出现 OpenMP 错误

java - 为什么单个 "if"比 "switch"慢?

c++ - fstream 对象的文件结尾

c++ - 在 Visual C++ 中删除调用后检测到堆损坏?