我已经读过postfix增量和减量运算符返回操作数的 rvalues 。假设这是真的,这样的代码怎么可能?:
int arr[5]{};
int *p = arr;
for (int i = 0; i != 5; ++i)
*p++ = i;
我的思考过程是
*p
将首先得到评估。*p++ = i;
怎么可能?答案 0 :(得分:2)
根据操作员的优先顺序,* p将首先得到评估。
错误。
下面:
*p++
首先评估增量,而不是*p
。
这给出了一个rvalue(指针的值),在取消引用之后,这变成了一个左右,您可以将其分配给i
。
您可以将for循环重写为:
for (int i = 0; i != 5; ++i) {
std::cout << *p << std::endl;
*p++ = i;
std::cout << *p << std::endl;
}
以获得更好的观点。
答案 1 :(得分:1)
根据运算符的优先级,
*p
将首先得到评估。
你错了。根据{{3}},将首先评估增量。这将产生一个rvalue(即指针在递增之前的值),然后,在它被取消引用之后,是一个你可以分配给它的 lvalue 。