如何将具有多行代码的内联函数视为一行?
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 蒙蔽了双眼,它只是为了编译器。
我有一个关于全局定义内联函数(普通函数)的想法 如果代码段是 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 蒙蔽了双眼,它只是为了编译器。