我想我知道什么内嵌关键字(看起来我没有),但与今天的编译器(Visual Studio 2012的C++编译器在我的情况),它是由编译器或编译器忽视它和内嵌其认为好的方法?它有助于将方法标记为在C++中内联吗?
回答
inline
关键字与内联无关。它实际上意味着:该函数的多个定义可以出现在同一程序中的不同翻译单元中,而不会违反一个定义规则。
仅使用它的是,即,如果你在报头中定义的功能,然后将其标记为inline
(使得多个翻译单位包括所述报头,从而生成所述功能可连接在一起)。
是的,但前提是该方法是在类之外的头部定义的。 – 2013-05-03 18:07:34
@ScottJones:在类中定义的成员函数隐式地作为模板函数(从ODR的角度来看)是'inline'。 – 2013-05-03 18:09:38
正确 - OP可能不知道... – 2013-05-03 18:11:34
您提到您使用的是Visual Studio 2012,因此您可以使用某些Microsoft特定的说明符强制您想要的内联行为。
通常,编译器会使用自己的判断来确定何时应该内联函数。但是,如果您知道(因为您具有编译器无法通过静态分析源代码获得的某些应用程序的上下文或知识),因此确实应该内联内容并希望覆盖编译器的判断,则可以使用__forceinline
关键字。
应当指出的是,有没有保证特定功能将被内联,即使使用__forceinline
,虽然如此,它认为它是不是一个强大的建议编译器以外的任何不是安全的。
在大多数情况下,最好将决定留给编译器,如果您想根据运行时行为进一步优化,请使用类似配置文件引导优化(PGO)的选项,它将选择如何优化包括哪些内联函数),基于哪些代码路径实际上在运行时最频繁地被击中。
- 1. 可能将系统类或方法标记为在C#中过时了吗?
- 2. 在C++中的内联throw()方法
- 3. 我可以在Objective-C中内联静态类方法吗?
- 4. hCard:它可以用于语义标记业务的联系方式吗?
- 5. pimpl中的方法是内联的吗?
- 6. LLVM是否将Objective-C方法转换为内联函数?
- 7. 为什么没有标准的方式强制内联在C++中?
- 8. 检查方法C#中的内联
- 9. 用于检查字符是否为标记的C#方法
- 10. 将方法标记为主线程?
- 11. 有没有一种方法可以将TokenRegex中的多个标记重新标记为一个标记?
- 12. 以div标记内容并将其应用于javascript中的内联样式
- 13. Intellij将所有方法标记为未使用,即使它们已被使用
- 14. 将标记的HTML设置为Tooltipster内容的最佳方法
- 15. 在Hibernate中将setter私有标记为好习惯吗?
- 16. 如何在C#中将标记类标记为[Serializable]?
- 17. 标记所有方法为“安全”
- 18. 在C#中有一个“upto”方法吗?
- 19. 有没有办法将cookies标记为HttpOnly在主塔中?
- 20. 在Git中,有没有办法将文件标记为“纯”?
- 21. 有没有办法在内联方法中使用let语句?
- 22. GCC内联C++函数没有“内联”关键字吗?
- 23. C#控制台日志记录:它会有内存问题吗?
- 24. 如何在UML中将方法标记为final?
- 25. 在TypeScript中将方法或函数标记为仅限dev?
- 26. 在Java中将方法标记为纯函数的约定
- 27. 你可以将这个内联asm转换为非内联吗?
- 28. 有没有任何纯html方法来将标记标记“合并”为自定义标记?
- 29. 有很多关于在帖子中标记用户的关联
- 30. Sinf - 它存在于C++中吗?
我们是否使用.net?后者是 – VoronoiPotato 2013-05-03 18:04:03
。至少启用了优化。 – john 2013-05-03 18:04:08
请记住'inline'只是一个_hint_,并不意味着内联是强制性的。 – 2013-05-03 18:04:55