这更像是一个句法优雅的问题,但我正在学习C ++并且在玩指针。如果我有一个类Car,我可以使用
创建指向该类的新实例的指针Car * Audi = new Car;
如果该类具有成员变量权重(比如说是unsigned int),我可以使用
访问它(*Audi).weight
或
Audi->weight
如果该类的成员变量age本身就是一个指针,我可以使用
访问它*((*Audi).age)
或
*(Audi->age)
除了这两种(肯定不是特别复杂的)解除引用指针之外,还有其他方法吗?我想想
Audi->*age
可行,但唉不行。
(我很欣赏访问者通常更喜欢,我只是感兴趣。)
答案 0 :(得分:5)
*(Audi->age)
您不需要括号,因为前缀运算符的优先级非常低:
*Audi->age
答案 1 :(得分:1)
没有人提到过这种方式:
Audi->age[0]
答案 2 :(得分:0)
从语法上讲,不,除非您想编写函数或宏来执行此操作。你可以,但如果你问我,只需使用访问器。此外,您不希望在堆上分配大多数对象。只需将它们声明为type foo;
或type foo = type()
,然后将它们放在堆栈中。除非您有充分的理由这样做,否则不应该使用动态分配将事物放在堆上,因为动态分配的开销很高。
答案 3 :(得分:0)
您访问age
指向的值的常用方法是您提到的那个:
*(Audi->age)
与->*
有一个完全不同的含义,它与指针指向方法有关。
在现代C ++中,你通常不会过多地接触指针。它可以探索,但是,一旦你开始编写真正的代码,尽量避免使用指针。 Stack是你的朋友:)