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

Posted

技术标签:

【中文标题】C++ 中的私有函数与静态函数【英文标题】:Private vs. Static functions in C++ 【发布时间】:2011-10-14 02:31:30 【问题描述】:

在一个类中使用private(也可能是static)函数对于我的类中使用的不需要访问实例数据的实用函数比在我的@987654325 中使用全局static 函数有什么好处吗? @实现类的文件? 第一个对我来说听起来更干净,但第二个确实更有意义,因为这些函数甚至不需要在 .h 文件中提及。

【问题讨论】:

相关:***.com/questions/2739146/… 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

我会推荐未命名的命名空间函数而不是文件静态函数 我知道“现代 c++”建议在未命名的命名空间中使用函数,但我看不到任何技术优势。事实上,这可能是不利的,因为这样的功能有外部链接,可能会减慢链接速度。 ***.com/questions/154469/… 是的,它非常微妙。最重要的is the answer about ODR,如果您想讨论它 - 评论这个答案。此外,标准不推荐使用静态函数这一事实应该让您信服 - 标准定义了规则 ODR 适用于类型,而不是函数。由于静态函数具有内部链接,因此不可能违反 ODR。 (如果你为一个函数提供两个定义违反了 ODR,链接器最终会抱怨。)【参考方案4】:

如果给定函数与您的class 相关,那么您是对的。您应该在您的class 正文中添加private static

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

【讨论】:

它可能与类实现有关,而不是与大多数情况下的类接口有关。在这种情况下不需要污染类接口

以上是关于C++ 中的私有函数与静态函数的主要内容,如果未能解决你的问题,请参考以下文章

C ++中的静态构造函数?我需要初始化私有静态对象

C++ - 如何从同一个类的静态函数访问一个类的私有成员?

c++中关于私有静态变量的问题

如何通过函数在 C++ 中设置私有静态数组?

私有静态成员函数或匿名命名空间中的自由函数?

C++:OpenMP 中的私有静态变量