C++中解引用类成员变量的语法

10

这更多是关于语法优雅的问题,我正在学习C++并尝试使用指针。如果我有一个类Car,我可以使用以下代码创建一个指向该类新实例的指针:

Car * Audi = new Car;
如果那个类有一个成员变量weight(比如无符号整型),我可以使用以下任一方式访问它:
(*Audi).weight

或者

Audi->weight
如果那个类有一个成员变量age是一个指针,我可以使用以下任一方式访问它
*((*Audi).age)

或者

*(Audi->age)

除了这两种(诚然并不特别复杂)的指针解除方法之外,是否还有其他方法?我想过

Audi->*age

这个方法看起来是可行的,但实际上却并不行。

(我知道通常最好使用访问器,只是我感兴趣。)

4个回答

7
*(Audi->age)

您不需要加括号,因为前缀运算符的优先级非常低:

*Audi->age

2
没有人提到这种方式:
Audi->age[0]

7
可以运行,但语义上有点棘手。看到这个,我现在期望age指向一个数组,而不仅仅是一个东西。 - cHao

0

你通常会访问被 age 指向的值,就像你提到的那样:

*(Audi->age)

->* 这个符号在指向方法的指针中有完全不同的含义。

在现代 C++ 中,通常不会太多地涉及指针。虽然探索指针是可以的,但一旦开始编写真正的代码,尽可能避免使用指针。堆栈是你的朋友 :)


顺便说一下,你不需要括号。 - TonyK

0
从语法上讲,不需要,除非你想编写一个函数或宏来完成它。虽然你可以这样做,但如果问我,还是使用访问器比较好。此外,大多数对象都不应该在堆上分配。只需将它们声明为type foo;type foo = type(),并让它们在堆栈上。除非你有特定的充分理由,否则不要使用动态分配将东西放在堆上,因为动态分配具有很高的开销。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接