为什么我们不能接受输入并一步操作它?
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;
为什么写下面的代码是可以接受的,
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;