爲什麼可接受寫以下代碼,爲什麼我們不能一步一步輸入和操作?
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