为什么可接受写以下代码,为什么我们不能一步一步输入和操作?
int x = foo();//some random value is assigned
cout << --x;
其中x
在同一行输出突变,但下面的代码是不?
int x = foo();//some random value is assigned
cin >> x--;
是否有另一种方法来抓取输入并在一个步骤中减少它?
为什么可接受写以下代码,为什么我们不能一步一步输入和操作?
int x = foo();//some random value is assigned
cout << --x;
其中x
在同一行输出突变,但下面的代码是不?
int x = foo();//some random value is assigned
cin >> x--;
是否有另一种方法来抓取输入并在一个步骤中减少它?
内置前缀增量和减量运算符返回左值。后缀增量和减量运算符返回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;
[对我不适用](http://coliru.stacked-crooked.com/a/bffc486130ea9b98)。或者我误解了你的答案? – 2015-01-26 22:26:45
@BaummitAugen对这个例子不起作用的是什么?它看起来正在做它应该做的。 – 0x499602D2 2015-01-26 22:28:04
OP希望“一步抓取输入和递减”。这只是照原样输入,不是吗? 'std :: cin >> x'甚至没有任何区别。 – 2015-01-26 22:29:48
由于大致相同的原因,你可以写'y = -x;'而不是'x-- = y;'。与输入无关。 – 2015-01-26 22:12:13
除非你输入一个混淆的编码比赛 - 你为什么要? – John3136 2015-01-26 22:13:14
当然,为什么不呢? 'cin >> x,x - ;' – deniss 2015-01-26 22:19:25