c++ - 从内联函数调用内联函数?

标签 c++ inline

这听起来是一个太简单的问题,以至于无法在某个地方找到答案,但我试着环顾四周,但找不到任何简单的答案。举个例子:

class vec
{
   double x;
   double y;
};

inline void sum_x(vec & result, vec & a, vec & b)
{
   result.x = a.x + b.x;
}

inline void sum(vec & result, vec & a, vec & b)
{
   sum_x(result, a, b);
   result.y = a.y + b.y;
}

当我调用 sum 并编译时会发生什么? sumsum_x 是否都被内联,以便它只转换为内联汇编代码来对两个组件求和?

这看起来像是一个微不足道的例子,但我正在使用一个 vector 类,它具有在模板中定义的维度,因此迭代 vector 上的操作看起来有点像这样。

最佳答案

inline 只是对编译器的提示。编译器是否实际内联函数是一个不同的问题。对于 gcc,有一个 always inline 属性来强制执行此操作。

 __attribute__((always_inline));

通过始终内联,你应该实现你所描述的(代码生成就像它写在一个函数中一样)。

但是,对于编译器应用的所有优化和转换,您只有检查生成的代码(程序集)才能确定

关于c++ - 从内联函数调用内联函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323325/

相关文章:

c++ boost导致崩溃

html - 行内元素的顶部边距

c++ - 我应该在我的程序中使用内联函数吗?

css - 如何显示 <div> 内联文字包围?

c++ - CUDA 设备端代码中的 C/C++ "inline"关键字

c++ - 从文件读取到 vector C++ 的函数

c++ - 如何按照模式对特定文件运行 cppcheck?

c++ - Visual C++ 2013 - Windows XP Sp1 C 程序不工作 - 空白命令行

c++ - 内存对齐 - 结构对齐的总结构大小,而不是处理大小

f# - 使用静态解析的类型参数链接中缀运算符