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

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

本文关键字:函数 一行 代码      更新时间:2023-10-16

我有一个全局定义内联函数(普通函数)的想法 如果代码段较小,使用"内嵌关键字"可以提高效果。我有 一个疑问: "如何在类中定义成员函数 也提供相同的性能并被视为内联?

实际上内联函数包含一行代码

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

内联函数仅意味着所有函数定义代码都直接放置在声明它的位置。

但是在类中定义的成员函数包含多个代码,而不是被视为内联为什么?

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

如果它实际上由编译器内联(即汇编代码直接插入到位,无需函数调用)则由其决定,并且主要取决于优化标志中选择的编译器优化策略。

如果非类成员函数

在头文件中完全定义,则需要为非类成员函数提供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;
}

内联并不意味着它只是一行代码。这意味着整个代码如果是单行或多行,则会在函数调用点插入,从而减少函数调用开销。

看看这段代码,我知道它不是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

您可以将所有代码放在一行上。所以不要被内联关键字贬低,它只适用于编译器。

我从你们所有人那里得到了明确的解释。

直觉在三个4点:

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

2.对于在类内声明的方法,如果将它们声明为带有内联关键字(无类概念)的普通函数,则性能将是相同的。

3.方法声明(对于类)是隐式内联的。

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