gpt4 book ai didi

c++ - C++ 运算符优先级表中的后增量与赋值

转载 作者:搜寻专家 更新时间:2023-10-31 01:26:37 24 4
gpt4 key购买 nike

我偶然发现了 https://en.cppreference.com/w/cpp/language/operator_precedence

在图表上,我看到后自增运算符 (++) 远高于赋值运算符 (=)。

enter image description here

但是,我知道

int a[] = {10,20};
int* b = &a[0];

*(b++) = 5;

cout << a[0] << endl; // 5
cout << a[1] << endl; // 20
cout << *b << endl; // 20, now points to a[1]

我总是认为后增量发生在赋值运算符之后是理所当然的。但是,如果我遵循操作优先级图表,那么后增量是否应该在 = 操作之前发生?答案不是应该是 a={10, 5} 而不是 a={5, 20} 吗?

最佳答案

“优先级”具有误导性。它通常与求值顺序(先发生的事情)无关,而是确定每个运算符的操作数是为了求值的目的。但是让我们检查一下您的示例。

*(b++) = 5;

这意味着 5 将被分配给左边的左值。从 C++17 开始,我们知道 5 完全在 *(b++) 之前求值。在此之前,它们可以按任何顺序进行评估。

现在,b++ 的含义是“增加 b,但求值为它的 值”。所以 b++ 可能会导致增量发生在赋值发生之前,是的,但是 (b++) 的值是增量发生之前的地址。这就是为什么在一个表达式中 b 被更新为指向下一个元素,同时修改当前元素。

关于c++ - C++ 运算符优先级表中的后增量与赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55085938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com