gpt4 book ai didi

具有预增量 : With or without parentheses is the same? 的 C++ 箭头运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:45 26 4
gpt4 key购买 nike

类(class)问题:

Watch the parentheses around the argument of the ++ operator. Are they really needed? What will happen when you remove them?

最初只有一个 cout 表达式。我添加了另一个以查看差异,如下所示:

#include <iostream>
using namespace std;

class Class {
public:

Class(void) {
cout << "Object constructed!" << endl;
}

~Class(void) {
cout << "Object destructed!" << endl;
}
int value;
};

int main(void) {
Class *ptr;

ptr = new Class;
ptr -> value = 0;
cout << ++(ptr -> value) << endl;
cout << ++(ptr -> value) << endl;
delete ptr;
return 0;
}

我的想法是在没有括号的情况下再次测试它,看看有什么不同:

    ...
cout << ++ptr -> value << endl;
cout << ++ptr -> value << endl;
...

两种情况下的结果是一样的。因此我得出结论:没有区别。

有人可以解释和纠正吗?如果没有区别,他们为什么会问这个问题?我觉得我缺少一个微妙之处。

结果:

Object constructed!
1
2
Object destructed!

最佳答案

没有区别,因为->的优先级高于++。这意味着 ++ptr -> value 总是被解析为 ++(ptr->value)

无论编译器如何看待您的代码,您都不应该这样写,因为不了解 C++ 运算符优先级规则的人可能认为代码执行的操作与实际执行的操作不同。 ++(ptr->value) 更清晰。

关于具有预增量 : With or without parentheses is the same? 的 C++ 箭头运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30662374/

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