为什么我们不能接受输入并一步操作它?

Why can't we take input and manipulate it in one step?

为什么写下面的代码是可以接受的,

int x = foo();//some random value is assigned
cout << --x;

其中 x 在与输出相同的行中发生突变,但下面的代码不是?

int x = foo();//some random value is assigned
cin >> x--;

是否有另一种方法来获取输入并一步递减?

内置前缀递增和递减运算符return lvalues。后缀递增和递减运算符 return prvalues。输入流的提取器运算符 (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;