我有一个简单的方程式,需要在整个代码中调用大约100次。我试图将函数开销降到最低,但仍然使用OOP概念(这对我来说是新的)。该公式只是一个简单的计算两个差异的最大值。它就像3条线。我应该使用内联函数吗?如果是这样,通常使用它的接受方式是什么(即,我应该创建一个单独的.h文件,将它放在一个基类中(所有使用此函数的对象都是间接派生的)在OOP中内联函数的正确方法C++
回答
除非您的编译器具有良好的链接时间优化功能(并且它们已启用),否则必须在头文件中声明并定义要内联的整个函数。至于将.h文件专门用于内联函数,或者将它放在类层次结构中,我们甚至不会告诉您,即使您向我们提供了其他代码和/或设计。对于唯一正确的方法来说,它比预先定义的规则更像是一种风格选择。
编辑:澄清:如果您的内联函数将只用于单一来源(.cpp)文件,您可以在与static inline
相同的文件中声明它。如果您希望可以访问多个源文件,请将其放入一个头文件中。
谢谢,这回答了我的问题的一部分。我唯一的另一个问题是如何保证函数将被内联......我认为这在inline关键字的范围内是不可能的。正确? – user2079828
几乎没有什么可以保证函数是内联的。编译器可能有'force_inline'或'always_inline'扩展名,但这并不是正确的做法。如果编译器不真的想要内联函数,那么这可能是一个很好的理由! –
所以基本上,我必须#定义获得这个功能,或将代码复制到每个使用它的地方? – user2079828
是的,您可以使用inline
函数成员如果它们不是virtual
但是在使用这个内联函数的每个文件中都应该存在它的定义,所以把这个函数的实现放在* .h文件中是一个好主意,如果它是虚拟的,你不能使用内联根据标准(虽然GCC允许)
但在任何情况下的标准并不能保证你的内联函数。 - 即使你把它标记为inline
您仍然可以通过'virtual'功能使用'inline'。它可能会降低编译器内联函数的概率(“内联”是一个提示,而不是保证)。但是,如果编译器静态地知道呼叫站点的实际类型,它确实允许编译器内联虚函数。 –
我不明白'提示'的概念给编译器。必须定义编译器何时或不会内联赋予关键字....的函数,否则它是无用的。 – user2079828
@ user2079828,嗯......但没有。编译器决定自己,如果它看到内联生成的函数会变得更慢或无用,它就不会定义它。 –
我不会把这样的函数放在类中,除非它需要使用类的某些状态,或者如果有一些很好的理由将它的使用限制在该类的层次结构中。
在.h中名称空间内的内联函数听起来像是一个好方法。通过将它放在名称空间中,您可以使用通用名称max,而不用担心它在全局名称空间中,然后可以收集适合该域的任何函数。
尽管如果它只是一个最大功能,也许只是使用std::max function将是一个不错的选择?
一般来说,如果可能,最好重用。它节省了时间并降低了维护成本。每个人都很清楚std :: max是什么,但其他一些max需要一些搞清楚。
最大值函数只是另一个函数的一部分。另一个功能是针对所有不同的122个对象实现的。它们具有相同的继承功能,但必须以不同的方式实施。最大函数是其中每一个都是相同的一部分。 – user2079828
当你说你有122个对象时,你是否意味着你实现了122个不同的类?这听起来像一个非常复杂的类层次结构! – PeterSW
是的。这不是我的选择。每个对象都来自同一个数据集,但必须根据中间类型设置数据,然后针对每个对象有三种类型的操作。 @PeterSW:我不能使用它。无论哪种方式,只需使用我自己的时间,多少时间就可以节省下来? – user2079828
- 1. 内联函数/方法
- 2. C++中的内联函数
- 3. C++中的内联函数
- 4. c中的内联函数
- 5. 在C++中使用rand()函数的正确方法是什么?
- 6. 在C++构造函数中分配内存的正确方法是什么?
- 7. 这个PDO OOP方法是否正确?
- 8. 在C++中的内联throw()方法
- 9. C++内联函数
- 10. 函数在C++中的内联要求
- 11. 如何在C99中正确内联和使用内联函数? (构建失败)
- 12. 内联函数在其他内联函数用C
- 13. 在C++中内联私有方法
- 14. OOP〜PHP,不同的函数方法?
- 15. JavaScript内联函数就像在C++中
- 16. 在C++中使用正确的方法
- 17. 内联函数的函数指针C
- 18. 在函数内正确添加函数
- 19. 在C中调用“方法”OOP
- 20. 使用ARMAResult.predict()函数的正确方法
- 21. 调用JavaScript函数的正确方法
- 22. 使用WebRtcAecm函数的正确方法
- 23. 在C中释放内存的正确方法是什么?#
- 24. 检查方法C#中的内联
- 25. 在iOS中确定互联网速度的正确方法8
- 26. c中的内联函数问题
- 27. C++内联方法实现
- 28. 内嵌另一个内联函数中的函数C
- 29. C++函数指针内联
- 30. C:指针内联函数
香草萨特在内联:http://www.gotw.ca/gotw/033.htm --- http://www.drdobbs.com/inline-redux/184403879 –
顺便说一句,我应该指出,如果你只是在学习C++,你不应该担心性能太多,性能几乎是内联的唯一原因。还要注意,'inline'关键字只是编译器的一个提示,编译器可以自由地不内联某些东西,甚至可以内联你没有明确要求内联的东西。 –
“inline”关键字在C++中不是“提示”。它甚至与优化没有任何关系。这只是一种绕过[一个定义规则](http://stackoverflow.com/questions/4192170/what-exactly-is-one-definition-rule-in-c)的方式,指示链接器接受多个定义功能。 –