静态函数编译器优化C ++

时间:2014-01-02 07:03:05

标签: c++ static

我知道如果一个函数是一个实用函数,或者我们必须在一个单例类中使用它来访问私有静态成员,我们应该在一个类中将一个函数声明为静态。

但除此之外,静态函数也提供任何类型的编译器优化,因为它没有传递“this”指针?为什么不通过已经实例化的类对象使用实用程序功能?或者只是将实用函数作为静态函数的最佳实践?

提前致谢。

2 个答案:

答案 0 :(得分:1)

启用优化后,编译器可能会完成“非传递此”优化。正如我所看到的,静态函数具有相当惯用的用途:

  • 实施模块。这里与名称空间有一些重叠,我宁愿使用名称空间。
  • 工厂:你可以使构造函数受保护/私有,然后有几个静态函数(使用不同的显式名称)创建实例。
  • 对于函数指针:静态函数不需要稍微复杂的成员函数指针语法。在与为C编写的库交互时,这可能是一个加分。
  • 要避免使用this并让编译器强制执行它。有时它是有道理的。例如,如果您有一个需要两个实例的可交换操作,那么采用这两个实例的静态函数会强调(在我看来)该操作是可交换的。当然,在许多情况下,您宁愿超载操作员。

一般情况下,静态函数会通过在一个普通函数前面添加一个类的名称来简化命名空间和“朋友”的混乱,大概是因为它们都是紧密相关的。

答案 1 :(得分:1)

静态存在将方法与类关联,而不是:

  1. 将其与该类的实例相关联(例如编写普通的非静态成员函数)。
  2. 将它保存在全局命名空间或其他任何命名空间中(比如在文件中声明一个函数,而不是在类中)。
  3. 静态说'从概念上说这是与这个类绑定/关联的东西,但它不依赖于该类的任何实例'。

    在更正式的术语中:静态成员函数与在类之外以类似方式声明的函数相同,除了它是该类的命名空间的一部分,并且它具有对该类的私有/受保护数据的访问权限成员。

    回到你的问题:

    1. 这里没有优化收益。
    2. 效用函数与它无关。是否在类本身(而不是它的实例)中对函数进行范围化是有意义的。
    3. 它没有'传递这个指针',因为没有实例可以说。您可以在不调用该类的构造函数的情况下调用静态成员函数。
相关问题