C++ 私有静态成员函数与私有成员函数

C++ 私有静态成员函数与私有成员函数,c++,static,C++,Static,如果需要在类之外访问静态,可以选择公共静态而不是私有静态。singleton,当函数不需要公开时,私有静态是首选的,其他未命名的名称空间也可以,在这种情况下,它只能通过静态成员函数或其他非静态成员函数进行访问 然而,我试图了解为什么选择私有静态而不是私有成员函数的核心思想? 当然,两者都可以访问类的私有成员或任何被传递的对象,静态成员明确要求传递一个对象,但为什么我不能通过使其成为私有的非静态成员函数来保持设计的开放性,即使它不需要访问私有成员,就像静态成员函数一样。通过这种方式,即使将来我需要

如果需要在类之外访问静态,可以选择公共静态而不是私有静态。singleton,当函数不需要公开时,私有静态是首选的,其他未命名的名称空间也可以,在这种情况下,它只能通过静态成员函数或其他非静态成员函数进行访问

然而,我试图了解为什么选择私有静态而不是私有成员函数的核心思想? 当然,两者都可以访问类的私有成员或任何被传递的对象,静态成员明确要求传递一个对象,但为什么我不能通过使其成为私有的非静态成员函数来保持设计的开放性,即使它不需要访问私有成员,就像静态成员函数一样。通过这种方式,即使将来我需要访问一些私有成员,我也不会将静态成员转换为非静态成员函数-我知道这不是什么大问题/变化,但有人能告诉我何时以及为什么选择一个而不是另一个吗?

当您有一个静态成员变量时,选择其访问级别的方式与选择非静态成员变量的方式相同。这里没有什么特别的

我的大多数私有静态都倾向于像内置常量这样的东西,它们只由类的内部使用

我承认我想不出很多其他的用例,但是如果函数在逻辑上与类的特定实例无关,因此不需要非静态的成员访问,那么我也会倾向于将函数设置为静态的——这可能比一些人沉迷于其中的要难一些

为什么我不能通过使设计成为私有的非静态成员函数来保持设计的开放性,即使它不需要访问私有成员,就像静态成员函数一样

你可以。这取决于你

这样,即使将来我需要访问一些私有成员,也可以避免将静态mem func转换为非静态mem func


当然。我是说,这是一个关键词。但是,如果您需要防止头文件发生更改(例如,您正在部署头文件),那么这种前向兼容性可能会很有用。可以说,这是将静态成员私有化的一个缺点,因为实际上没有太多可靠的正面。同样,这取决于您。

非静态成员函数需要传递一个指向实例参数的额外指针,这表示一些开销。在一些性能关键型应用程序中,这一开销可能很重要。