c++ - 为什么在 C++ 中显式声明 "inline"

标签 c++ optimization inline

Possible Duplicate:
When should I write the keyword 'inline' for a function/method?

所以这是一个困扰我一段时间的问题,我无法得到明确的答案。我的理解是,一个好的编译器通常会意识到内联函数既安全又有利,如果打开优化,它将内联所有此类函数,因为它们被明确标识为内联函数由程序员决定。此外,编译器会识别出内联函数何时不安全/不明智,并且在这种情况下会简单地忽略程序员对内联函数的请求。

因此,我想知道将函数明确声明为内联函数有什么好处?只要打开优化,编译器就会内联它认为内联的所有函数,并且只内联那些函数。

由于嵌套的 h 文件,我发现了一些关于内联保护以防止多重定义的讨论,但肯定 #ifdefine'ing header 源代码是更好的做法,并且再次呈现关键字 inline void 的使用?

最佳答案

您了解编译器优化。您对 inline 是什么的假设是错误的。尽管名称 inline 不是为了优化。 inline 主要是“违反” one definition rule逍遥法外。基本上,它告诉链接器许多翻译单元可以看到该定义,因此它不应该在多个翻译单元上找到它。

一些编译器可能会将其视为内联函数的提示,但这完全取决于编译器,完全可以忽略该提示。

标题保护仅防止同一翻译单元上的多个定义。它们不适用于翻译单元。

关于c++ - 为什么在 C++ 中显式声明 "inline",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507959/

相关文章:

c++ - 使用 movdqa 从标签移动到 xmm# 给我未处理的异常

c++ - rxcpp 简单可观察<int>

c# - 将可写 StringBuilder 数组从 C# 传递到 C++

java - RandomAccessBuffer 的性能改进

c - static inline void 和 void 有什么区别?

php - li 不显示内联

c++类方法回调类似于std::thread

optimization - Pyomo 和 Gekko 定值(value)与 Excel 不同

sql - 选择查询所需的性能

c - #define 在 GCC 中的内联汇编