我了解C ++中减量/增量运算符的前缀/后缀表示法之间的基本区别。但是,在下一个示例中发生了一些使我感到困惑的事情。
我在下面共享的代码显示以下内容。
5 * 4 ** 3 *** 4 **** 2 ***** 1
但是我猜想它会打印出来。
5 * 4 ** 4 *** 3 **** 2 ***** 1
这是怎么回事?向/从堆栈中推入/弹出是否有问题?
int var = 5;
cout << var-- << '*'; //prints 5 and then decrements to 4.
cout << var << "**"; //The value of var (now 4)
//is printed to the console.
//The next line prints 3***4****.
//I would have guessed it prints 4***3****.
cout << var-- << "***" << var-- << "****";
//No matter what the above line prints,
//the value of var after the above lines is 2, so...
cout << var-- << "*****" << var << endl; //...Print 2, decrement to 1
//and then 1 is finally printed.
答案 0 :(得分:1)
欢迎来到行为不确定的陌生世界。在同一条语句中的同一变量上两次调用一个递增或递减运算符是未定义的行为,所以不要这样做:)
#include <iostream>
int main()
{
int i = 1;
// should this print 9, 10, or 12? Compilers will vary...
std::cout << (++i + ++i + ++i) << std::endl;
return 0;
}
答案 1 :(得分:0)
此行中的问题:
cout << var-- << "***" << var-- << "****";
是未定义的行为,因为您在单个语句中使用了两次递减。