【问题标题】:C++ syntax for dereferencing class member variables用于取消引用类成员变量的 C++ 语法
【发布时间】:2012-06-30 03:14:42
【问题描述】:

这更多是句法优雅的问题,但我正在学习 C++ 并玩弄指针。如果我有一个类 Car,我可以创建一个指向该类的新实例的指针

Car * Audi = new Car;

如果该类有一个成员变量权重(比如一个无符号整数),我可以使用任一方法访问它

(*Audi).weight

Audi->weight

如果该类有一个成员变量age,它本身就是一个指针,我可以使用任一方法访问它

*((*Audi).age)

*(Audi->age)

除了这两种(当然不是特别复杂)解除指针引用的方法之外,还有其他方法吗?我想考虑

Audi->*age

会起作用,但可惜没有。

(我很欣赏访问器通常更可取,我只是感兴趣。)

【问题讨论】:

    标签: c++ class pointers syntax


    【解决方案1】:
    *(Audi->age)
    

    你不需要括号,因为前缀运算符的优先级很低:

    *Audi->age
    

    【讨论】:

      【解决方案2】:

      没有人提到过这种方式:

      Audi->age[0]
      

      【讨论】:

      • 有效,但语义不确定。看着那个,我现在希望 age 指向一个数组,而不仅仅是一个东西。
      【解决方案3】:

      从语法上讲,不,除非您想编写一个函数或宏来执行此操作。你可以,但如果你问我,只需使用访问器。此外,您不想在堆上分配大多数对象。只需将它们声明为 type foo;type foo = type() 并让它们在堆栈上。除非您有充分的理由这样做,否则您不应该使用动态分配将东西放在堆上,因为动态分配的开销很大。

      【讨论】:

        【解决方案4】:

        您访问age 指向的值的常用方法是您提到的那个:

        *(Audi->age)
        

        ->* 的含义完全不同,它与指向方法的指针有关。

        在现代 C++ 中,您通常不会过多地接触指针。可以探索,但是一旦你开始编写真正的代码,尽量避免使用指针。 Stack 是你的朋友 :)

        【讨论】:

        • 顺便说一句,你不需要括号。
        猜你喜欢
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多