当我打印出我的测试时,当我注意到实际值输出中出现意外情况时,我正在重载postfix和前缀++运算符并测试它们。例如,这是一个整数测试:
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?好吧,也许它会在打印之前解析语句,并且在打印开始之前我会增加。
但后来我测试了后缀整数递增...
int i = 0;
cout << "before postfix: " << i << " postfixing.. " << i++ << " after postfix. " << i << endl;
before postfix: 1 postfixing.. 0 after postfix. 1
除了中间声明之外,增量发生在哪里?!这非常直观。有人可以对此有所了解吗?
答案 0 :(得分:3)
在同一语句中读取和递增变量(或者,在技术上,在两个序列点之间,在这种情况下,分号)会导致undefined behaviour - 换句话说,编译器是允许做任何想做的事。