OOP C++中内联函数的正确方法
Proper way to inline function in OOP C++
我有一个简单的等式,在整个代码中需要调用大约100次。我试图将函数开销保持在最低限度,但仍然使用OOP概念(这对我来说是新的)。这个方程式只是计算两个差值的最大值的一个简单方程式。它就像3行。我应该使用内联函数吗?如果是这样,通常接受的使用方法是什么(即,我应该创建一个单独的.h文件,将其放在基类中(使用此函数的所有对象都是间接派生的)。
除非编译器具有良好的链接时间优化功能(并且已启用),否则必须在头文件中声明和定义要内联的整个函数。至于将.h文件专门用于内联函数,或者将其放在类层次结构的何处,即使您将其余的代码和/或设计提供给我们,我们也无法告诉您。这实际上更像是一种风格选择,而不是关于唯一正确方法的预定义规则
EDIT:为了澄清:如果您的内联函数只在单个源(.cpp)文件中使用,那么您可以在与static inline
相同的文件中声明它。如果您希望多个源文件可以访问它,请将它放在头文件中。
是的,如果inline
函数成员不是virtual
,则可以使用它们。但是在每个使用这个内联函数的文件中都应该有它的定义,所以把这个函数的实现放在*.h文件中是个好主意。如果它是虚拟的,则不能根据标准使用内联(尽管gcc允许)。
但在任何情况下,标准都不能保证内联函数——即使您将其标记为inline
。
我不会把这样的函数放在类中,除非它需要使用类的一些状态,或者有充分的理由将其使用限制在该类层次结构中。
在.h中的命名空间中使用内联函数听起来是一个不错的方法。通过将其放在命名空间中,您可以使用公共名称max,而不用担心它在全局命名空间中,然后您可以在那里收集适合该域的任何函数。
尽管如果它只是一个max函数,那么仅仅使用std::max函数可能是一个不错的选择?
一般来说,如果可能的话,最好是重复使用。它节省了时间并降低了维护成本。每个人几乎都知道std::max是什么,但其他一些max需要一些时间才能弄清楚。
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用std::函数映射对象方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 初始化具有非默认构造函数的std::数组项的更好方法
- 如何制作一个将函数作为参数的类方法
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 获取从C++中同一类中的构造函数调用的方法返回的值
- C++ - 类方法函数指针unordered_map的初始化器列表
- 如何从具有多个对象/字段的类中调用方法函数
- 如何以这种方式访问另一个文件的方法/函数
- Vim 转到标准库方法/函数定义
- 在方法/函数中使用"static const std::string"还是只使用"cons
- 我可以将这两种方法/函数合二为一吗?
- 为什么我不能添加到方法/函数外部的 ostringstream
- 如何在调用方法函数中将列表、向量或数组作为参数传递
- 如何专门化模板化类,以采用不带参数的方法函数类型
- 类方法/函数中的指针
- 修改参数和/或返回新实例的方法/函数的命名约定
- 在Lua中跟踪变量以进行读访问,以启动用户定义的c++方法/函数
- 调试可视化工具在预览中使用成员方法/函数调用