c++ - 编译器何时内联 C++ 代码?

标签 c++ optimization compiler-construction inline

在 C++ 中,方法是否仅在显式声明 inline(或在头文件中定义)时才被内联,还是允许编译器在他们认为合适的情况下内联方法?

最佳答案

inline 关键字实际上只是告诉链接器(或告诉编译器告诉链接器)同一函数的多个相同定义不是错误。如果要在 header 中定义函数,则需要它,或者如果 header 包含在多个编译单元中,则链接器会出现“多重定义”错误。

选择 inline 作为关键字的理由似乎是人们想要在 header 中定义(非模板)函数的唯一原因是它可以被编译器内联.编译器不能内联函数调用,除非它具有完整的定义。如果函数没有在头文件中定义,编译器只有声明,不能内联函数,即使它想内联。

现在,我听说,优化代码的不仅是编译器,链接器也可以做到这一点。即使函数没有在同一个编译单元中定义,链接器也可以(如果他们还没有这样做的话)内联函数调用。

如果在头文件中定义大于单行的函数可能不是一个好主意(不利于编译时间,如果内联大函数,可能会导致臃肿和性能下降)。

关于c++ - 编译器何时内联 C++ 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443982/

相关文章:

c++ - this-> 是否必须从派生类访问 Base<T> 标识符?

javascript - 优化 Javascript 中的函数

optimization - Z3 优化中的间隙公差控制

c++ - 在另一个(来自抽象父级)父级中定义抽象方法?

c++ - 将节点添加到双向链表时遇到问题

.net - 监控任何应用程序中的选择

java - 计算最大 10^16 的 totient 函数之和

java - 通过查看内置类的编译器代码来编写优化代码的示例

c++ - 从 C/C++ 到 NASM src

c++ - C++ 虚拟继承是如何在编译器中实现的?