【问题标题】:Using static function for classes' helpers in C++在 C++ 中为类的助手使用静态函数
【发布时间】:2013-01-18 09:13:22
【问题描述】:

仍然值得在 C++ 中使用静态函数作为助手吗?

示例: 在文件.cpp中

static void helperFunc() { do something }

// class implementation
// ...

// some public method, not static
void myClass::doSomething() { helperFunc(); }

这样我就不必在类的声明中声明私有方法了。

或者最好使用未命名的命名空间并写入(在与上述相同的文件中)?

namespace {
    void helperFunc() { }
}

什么更好?

【问题讨论】:

  • myClass::doSomething() 也是静态的吗?
  • stackoverflow.com/a/3070815/1467309这个回答你的问题
  • 为什么不想声明私有方法?
  • helperFunc 经常会改变,当它在头文件中(作为私有方法)时,它涉及整个项目的重建。将其作为静态函数更“本地化”且更易于更改
  • 关于使用静态命名空间和匿名命名空间的区别,请查看stackoverflow.com/questions/154469/…

标签: c++


【解决方案1】:

你的两个例子都不比另一个好。这是风格问题。 static 关键字更具表现力。它直接说明“不要导出此名称”。使用匿名命名空间并不那么富有表现力。名称不会被导出的事实是副作用,而不是主要功能。

【讨论】:

    【解决方案2】:

    最好在类中声明一个私有(可能是静态的)方法。

    【讨论】:

    • 出于同样的原因,方法通常优于全局函数。所有全局函数都彼此无关,因为它们不属于任何类,因此它们令人困惑。为什么你认为 Java 和 C# 不允许使用全局函数?
    • 没有好坏之分。这取决于函数在做什么。
    • @user1610015 C++ 不是 Java,也不是 C#。
    • @user1610015 你知道什么是 C++ 命名空间吗? static 方法之间的相关性就像命名空间中的函数一样。
    • @LuchianGrigore 不,它们不是因为命名空间可以包含多个类,反之亦然。类比命名空间更紧密地对成员进行分组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2012-03-30
    • 2020-02-23
    相关资源
    最近更新 更多