为什么可以编写以下代码,

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/

10-11 01:04