为什么可以编写以下代码,
int x = foo();//some random value is assigned
cout << --x;
哪里
x
与输出在同一行中发生了变异,但是下面的代码却没有?int x = foo();//some random value is assigned
cin >> x--;
是否有另一种方法可以一步一步获取输入并减少输入?
最佳答案
内置的前缀递增和递减运算符返回左值。后缀递增和递减运算符返回prvalue。输入流(operator>>()
)的提取器运算符需要可修改的左值作为其操作数。
内置前缀运算符:
A& operator++(A&)
bool& operator++(bool&) (deprecated)
P& operator++(P&)
A& operator--(A&)
P& operator--(P&)
内置后缀运算符:
A operator++(A&, int)
bool operator++(bool&, int) (deprecated)
P operator++(P&, int)
A operator--(A&, int)
P operator--(P&, int)
因此,应编译为:
std::cin >> --x;
但不是这个:
std::cin >> x--;
但是,递减将在执行输入之前发生。您实际上无法读入变量并随后在单个表达式中减小其值。您最好将其分为两个部分:
std::cin >> x;
--x;
关于c++ - 为什么我们不能一步一步接受输入并进行操作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28159659/