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

时间:2015-01-26 22:09:49

标签: c++ operators

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

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

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

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

是否有其他方法可以一步获取输入并递减它?

1 个答案:

答案 0 :(得分:2)

内置前缀增量和减量运算符返回 lvalues 。后缀增量和减量运算符返回 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;