给定一个指向C++对象的指针,调用静态成员函数的首选方法是什么?

i_a*_*orf 4 c++ static coding-style

说我有:

class A {
public:
    static void DoStuff();

    // ... more methods here ...
};
Run Code Online (Sandbox Code Playgroud)

后来我有一个想要调用DoStuff的函数:

B::SomeFunction(A* a_ptr) {
Run Code Online (Sandbox Code Playgroud)

是否更好地说:

    a_ptr->DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

或者更好,即使我有一个实例指针:

    A::DoStuff()
}
Run Code Online (Sandbox Code Playgroud)

这纯粹是一种风格问题,但在做出决定之前,我想得到一些明智的意见.

Fre*_*son 22

我想我更喜欢"A :: DoStuff()",因为更清楚的是调用静态方法.


Ada*_*eld 19

最好通过名称而不是通过对象来调用静态方法,因为它实际上根本不使用该对象.在Java中,存在同样的问题.Java中一个不太常见的问题如下:

Thread t = getSomeOtherThread();
t.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

这编译很好,但几乎总是一个错误 - Thread.sleep()是一个静态方法,导致当前线程休眠,而不是代码似乎意味着正在执行的线程.


Ben*_*ins 6

我个人更喜欢A :: DoStuff()约定,因为任何阅读代码的人都会立即明白它是对静态成员函数的调用.