如何将具有多行代码的内联函数视为一行?

How the Inline functions having multiple lines of code are treated as a single line?

我有一个关于全局定义内联函数(普通函数)的想法 如果代码段是 small.I,则使用 "inline keyword" 可以提高性能 怀疑: “类 中的成员函数是如何定义的 也提供相同的性能并被视为内联?”

Actually inline functions contain a single line of code

这个说法是错误的。没有这样的限制。

内联函数仅仅意味着所有的函数定义代码直接放在声明的地方.

but member functions defined inside a class contain multiple code instead treated as inline why?

如果您指的是 inline 关键字,也没有限制用该关键字标记的函数只能包含一行代码。

是否由编译器实际内联(即汇编代码直接插入到位,没有函数调用)由其决定,主要取决于优化标志中选择的编译器优化策略。


如果非 class 成员函数在头文件中完全定义,则需要为它们提供 inline 关键字,以避免 ODR 违规错误。

下面是一个例子(假设是头文件):

class foo {
    int x_;

public:
     // Inside the class declaration 'inline' is assumed as default
     int x() const { return x_; }
     int y() const {
         int result = 0;
         // Do some complicated calculation spanning 
         // a load of code lines
         return result;
     }
};

inline int bar() { // inline is required here, otherwise the compiler
                   // will see multiple definitions of that function
                   // in every translation unit (.cpp) that includes
                   // that header file.
    return 42;
}

内联并不意味着只有一行代码。这意味着整个代码,无论是单行还是多行,都被插入到函数调用点,从而减少了函数调用的开销。

大家的解释我都清楚了

直觉三四分:

1.For 普通函数(不是在 classes 中声明/定义的方法) inline 关键字用于插入汇编代码(由编译器),从而避免重复函数调用。

2.For 在 classes 中声明的方法,如果将它们声明为带有 inline 关键字的普通函数(没有 class 概念)对于一个小片段,性能将是相同的。

3.method 声明(对于 classes)是隐式内联的。

4.functions 声明(如果需要)是显式内联的。

看看这段代码,我知道它不是 C++,但基础是一样的。

#include <stdio.h>
#define inlineMacro(x) ((x) = (x) + 1); ((x) = (x) * 2)

int main()
{
    int i = 5;
    inlineMacro(i);
    printf("%i",i);

return 0;
}

输出:

12

您可以将所有代码放在一行中。所以不要被关键字 inline 蒙蔽了双眼,它只是为了编译器。