如何将具有多行代码的内联函数视为一行?
How the Inline functions having multiple lines of code are treated as a single line?
我有一个全局定义内联函数(普通函数)的想法 如果代码段较小,使用"内嵌关键字"可以提高效果。我有 一个疑问: "如何在类中定义成员函数 也提供相同的性能并被视为内联?
实际上内联函数包含一行代码
这种说法是错误的。没有这样的限制。
内联函数仅意味着所有函数定义代码都直接放置在声明它的位置。
但是在类中定义的成员函数包含多个代码,而不是被视为内联为什么?
如果您指的是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.函数声明是(如果需要)是显式内联的。
相关文章:
- 如何使用运算符在同一行中多次调用函数
- uncrustify:如何将多行 C 函数调用的参数组合到一行上?
- 使用更改此变量的函数在同一行中打印引用变量
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- C++将函数指针放入一行的映射中
- C++ 两个函数除了一行之外执行相同的操作
- 将地址返回到 2D 数组中的一行值的函数
- 无法理解代码的特定片段:这是一个函数,只是一行还是什么
- 线程1:EXC_BAD_ACCESS错误,此错误在第一行的CPP文件中的句柄函数中出现
- 当两个函数位于一行中时,堆栈框架的样子
- 如何将具有多行代码的内联函数视为一行?
- 为什么这个函数从不超出第一行
- 无法弄清楚为什么只从文件中读取一行矩阵以及为什么我无法将 2D 数组传递给函数
- clang format函数和错误检查在同一行
- 从函数结果中分配 std::shared_ptr 的一行是什么?
- 当const在另一行处的const时,doxygen parse const成员函数不正确
- 为什么在同一行上有 2 个函数调用时跳过函数调用
- 在文件中返回一行的函数
- getline函数只读取第一行
- Std::sort函函数一行