我正在尝试连接post和pre-increment运算符。我看到,对于一些涉及post操作符的组合,我得到了不可分配的错误。这是因为一旦定义了j的值,post运算符就会被计算。有人能给我更深层次的理解吗?
我正在尝试这些奇怪的场景,因为我试图在c++中变得更好。如果有什么方法可以学得更好。我将不胜感激。
#include <iostream>
int main() {
int j = 0;
int i = 0;
// This works
j = (++i)++;
std::cout << "J is: " << j << "\n";
// This doesn't
j = ++(i++);
std::cout << "J is: " << j << "\n";
// This does
j = (i++);
std::cout << "J is: " << j << "\n";
// This doesn't
j = (i++)++;
std::cout << "J is: " << j << "\n";
}发布于 2019-07-25 17:29:36
不同之处在于前缀运算符++返回左值,而后缀运算符++返回右值。
例如,您可以这样写(偶数的多个加号)
j = ++++++++i;但你只能写(只有两个加号)
j = i++;来自C++17标准((后缀) 8.5.1.6增量和减量)
1后缀++表达式的值是其操作数的值...
和((前缀) 8.5.2.2递增和递减)
1...结果是更新后的操作数;它是一个左值...
相对于你的问题,考虑后增量和前增量之间的一个更有趣的差异。这是一个演示程序
#include <iostream>
int main()
{
int a[] = { 10, 20 };
int *p = a;
std::cout << p++[0] << '\n';
p = a;
std::cout << ++++p[0] << '\n';
return 0;
}它的输出是
10
12不同之处在于下标运算符是通过使用后缀表达式定义的。
因此,这个表达式p++[0]等同于( p++ )[0]
虽然这个表达式++++p[0]等同于++++( p[0] )
https://stackoverflow.com/questions/57198625
复制相似问题