当我在打印测试时注意到实际值输出中出现意外情况时,我正在重载后缀和前缀 ++ 运算符并测试它们。作为示例,这是一个整数测试:
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
除了中间语句之外,增量发生在任何地方?!这是相当违反直觉的。有人可以解释一下吗?
在同一语句中(或者从技术上讲,在两个语句之间)读取并递增变量序列点,在本例中为分号)导致未定义的行为- 换句话说,编译器可以为所欲为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)