为什么编写以下代码是可以接受的,
int x = foo();//some random value is assigned
cout << --x;
其中x
在与输出相同的行中发生变异,但下面的代码不是?
int x = foo();//some random value is assigned
cin >> x--;
是否有其他方法可以一步获取输入并递减它?
答案 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;