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

时间:2018-01-20 13:27:04

标签: c++ inline-functions

我对全局定义内联函数(普通函数)有所了解  如果代码片段很小,使用“内联关键字”可以提高性能。我有  怀疑:  “如何在类中定义成员函数  也提供相同的性能并被视为内联?“

4 个答案:

答案 0 :(得分:1)

  

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

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

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

  

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

如果您指的是fraud_indices = np.array(dataset[dataset.Class == 1].index) fraud_samples = dataset.iloc[fraud_indices, :] 关键字,那么也没有约束条件,标有该关键字的函数只能包含一行代码。

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

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

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

inline

答案 1 :(得分:1)

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

答案 2 :(得分:1)

看看这段代码,我知道它不是 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 分心,它只是为了编译器。

答案 3 :(得分:0)

大家都清楚地解释了。

INTUITION分为3点:

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

2。对于在类内部声明的方法,如果将它们声明为带有内联关键字(无类概念)的正常功能(一小段代码),其性能将相同。

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

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

相关问题