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

时间:2015-11-25 17:49:07

标签: c++ c private-members

我有一个C ++类,在其中一个成员函数中有一个重复的代码段。所以我把它解压缩成一个函数,但只有这个成员函数才会调用这个新函数。目前它只是cpp文件中定义的c函数,而不是其他任何声明。

将此作为私有C ++成员函数是否有任何优势,函数本身的代码不使用该类的任何变量。

4 个答案:

答案 0 :(得分:4)

好吧,如果它是参数的任何补充,最新的CppCoreGuidelines说你应该“C.5: Place helper functions in the same namespace as the class they support”。所以它们不应该是实际类的一部分,而应该是它们所在的命名空间的一部分。

答案 1 :(得分:1)

如果将其添加到类中,则它将成为类签名的一部分。 因此,对函数签名进行更改会更改类签名。鉴于它将是一个私人功能,你不可能通过以这种方式暴露它来获得更多。

如果它需要访问该类的内部,那么作为该类的一部分可能会简化其实现。

如果它不需要访问内部,您可以将其添加到cpp文件中的匿名命名空间。这样,函数符号就不会暴露在任何不需要的地方。

答案 2 :(得分:1)

(扩展评论的排序)

您已在.cpp文件中声明了一个自由函数。 这是一个很好的设计决策,其他答案指出。您可以拥有的最清楚的方法是只能从该.cpp文件中看到无法查看或更改状态的方法。根据CppCoreGuidelines,我可能想把它放在与类相同的命名空间中。

等效地,您可以在头文件中声明private static成员函数。这是C#/ Java意义上的static,而不是C语义中的​​任何一个(C++ has all of these meanings)。但是,我没有看到好处,因为你获得的唯一的东西是不必要的重新编译。

答案 3 :(得分:0)

是。将函数放在类中定义了它的范围和上下文。这使维护更容易,并且允许您在将来扩展其功能而无需重大代码重写。实际上,在这种情况下,我通常更喜欢在课堂上使函数静态,即在中间的某个地方会面。