C 调用静态方法
C++ calling a static method
假设您有以下类:
struct Foo {
static void print(std::string x) { std::cout << x << std::endl; }
};
调用print
(例如
Foo foo; //Or a pointer...
foo.print("Hello world");
和
Foo::print("Hello world");
?
有明显的区别,即第一版必须构建和破坏Foo
。
然后有明显的相似性,两个版本在执行函数调用时执行相同的操作(构造字符串,打印等)。
不太明显的差异在于对两个表达式的评估。您会看到,即使呼叫不需要foo
,它仍然作为表达式的一部分进行评估:
[class.static]/1
X类的静态成员可以使用合格的ID 表达式X :: S;不必使用类成员访问 语法是指静态成员。静态成员可以转介 使用类成员访问语法,在这种情况下为对象 评估表达式。
在您的情况下,这并不意味着任何意义。但是在某些情况下,它可以防止您的程序编译。例如,如果foo
改为constexpr函数中的参考参数。
呼叫点没有区别。
是六个和六个。 Foo::print("Hello world");
是更多习惯;一项约定已经成长,该惯例向读者发出信号,表明print
可能是static
函数。为此,在您的特殊情况下使用foo.print("Hello world");
是特殊的,因此令人困惑。因此,请避免这种方式,特别是如果引入不必要的实例foo
。
请注意,如果要在复杂类层次结构中的另一种方法中达到print
的特定覆盖,也可以使用使用示波器分辨率运算符的符号!因此,我对上面的可能使用。
您的示例没有区别。请记住,静态变量在您班级的所有实例中共享。因此,您可以通过范围操作员或通过成员选择访问它们:
class A{
public:
A(){count++;}
~A(){count--;}
static int count;
};
int A::count = 0;
int main(){
A aObj, bObj, cObj;
std::cout << "number of A instances: " << A::count << std::endl;
std::cout << "number of A instances: " << aObj.count << std::endl;
return 0;
}
相关文章:
- 如何通过命名空间调用非静态方法
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在 c++ 中异步调用静态方法?
- 从另一个标头中的标头调用静态方法
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 从部分专用模板方法调用模板非静态方法
- 在子类上调用模板化静态方法时获取类的类型名
- 调用没有主体的未实现静态方法
- 从静态方法调用静态函数指针
- Cython:无法调用共享库的非静态方法
- 调用静态方法,收到错误:LNK2019
- 从线程内的对象调用静态方法
- 如何在C++中宏 #define 静态方法调用?
- 测试项目在访问私有静态方法时遇到问题,尽管我从未直接调用过它
- 在不指定实例化的情况下调用类模板的静态方法的方法
- C 调用静态方法
- 当从静态方法调用非静态Attach时,使用std::packaged_task对CAsyncSocket Detach套
- C++:从静态方法调用继承的静态方法
- C++使用*this从静态方法调用一个抽象方法
- 是否可以从 cpp 中定义的静态方法调用私有构造函数