gpt4 book ai didi

c++ - cout 语句中调用顺序的解释,后缀与前缀

转载 作者:行者123 更新时间:2023-11-30 03:08:15 25 4
gpt4 key购买 nike

我正在重载后缀和前缀++ 运算符并测试它们,当我在打印测试时注意到实际值输出中出现意外情况。例如,这是一个整数测试:

int i = 0;
cout << "before prefix: " << i << " prefixing.. " << ++i << " after prefix. " << i << endl;

在我看来,这应该打印出 "before prefix: 0 prefixing... 1 after prefix.1"

令我沮丧的是,这会打印 before prefix: 1 prefixing.. 1 after prefix。 1为什么它在通话开始时已经是 1?!好的,也许它在打印之前解析了语句,并且 i 在打印开始之前就已经递增了。

但后来我测试了后缀整数递增...

int i = 0;
cout << "before postfix: " << i << " postfixing.. " << i++ << " after postfix. " << i << endl;

before postfix: 1 postfixing.. 0 after postfix. 1

递增发生在除了中间语句以外的任何地方?!这是非常违反直觉的。有人可以解释一下吗?

最佳答案

在同一条语句(或者,技术上,在两个序列点之间,在本例中为分号)中读取和递增一个变量导致undefined behaviour - 换句话说,编译器可以为所欲为。

关于c++ - cout 语句中调用顺序的解释,后缀与前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5204805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com