C++ C+中的私有与静态函数+;

C++ C+中的私有与静态函数+;,c++,class,static,scope,private,C++,Class,Static,Scope,Private,在类中使用私有(也可能是静态)函数用于我的类中使用的实用程序函数,这些函数不需要访问实例的数据,与在我的文件中使用实现该类的全局静态函数相比,有什么优势吗? 第一个听起来更清晰,但第二个确实更有意义,因为这些函数甚至不需要在.h文件中提及。如果给定的函数与您的类相关,那么您是对的。您应该在类正文中设置它们私有静态 [注意:如果这些实用程序函数根本不相关,那么您可以考虑将它们封装在名称空间或另一个Util类中,并将其保留在文件范围内。]如果不需要私有静态函数,我不会将它们放在头文件中。它们只会污染

在类中使用
私有
(也可能是
静态
)函数用于我的类中使用的实用程序函数,这些函数不需要访问实例的数据,与在我的
文件中使用实现该类的全局
静态
函数相比,有什么优势吗?

第一个听起来更清晰,但第二个确实更有意义,因为这些函数甚至不需要在
.h
文件中提及。

如果给定的函数与您的
类相关,那么您是对的。您应该在
正文中设置它们
私有静态


[注意:如果这些实用程序函数根本不相关,那么您可以考虑将它们封装在
名称空间
或另一个Util类中,并将其保留在文件范围内。]

如果不需要私有静态函数,我不会将它们放在头文件中。它们只会污染头文件并增加更多工作

但是,当您在类中有一个模板方法/函数,并且希望在其中使用该助手函数时,可能需要私有静态函数


使用私有静态函数而不是全局静态函数的另一个原因是它们可以访问私有类成员(变量、函数)。

只需将它们设置为文件静态函数即可。如果它们与类没有任何关系,不要将它们放在那里。

如果私有函数不修改类成员,那么它与全局静态函数相比没有任何优势。在类内部或外部没有区别

相关:我建议使用未命名名称空间函数而不是文件静态函数我知道“现代c++”建议使用未命名名称空间中的函数,但我看不到任何技术优势。事实上,这可能是不利的,因为这样的功能有外部链接,可能会减慢链接。是的,这是相当微妙的。最重要的是,如果你想讨论它-评论这个答案。另外,标准不推荐使用静态函数这一事实应该让您相信-标准定义的规则适用于类型,而不是函数。由于静态函数具有内部链接,因此不可能违反ODR。(如果您为一个函数提供了两个定义,从而违反了ODR,那么链接器最终会抱怨。)它可能与类实现有关,而不是像大多数情况那样与类接口有关。在这种情况下,不需要污染类接口