这听起来是一个太简单的问题,以至于无法在某个地方找到答案,但我试着环顾四周,但找不到任何简单的答案。举个例子:
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
并编译时会发生什么? sum
和 sum_x
是否都被内联,以便它只转换为内联汇编代码来对两个组件求和?
这看起来像是一个微不足道的例子,但我正在使用一个 vector 类,它具有在模板中定义的维度,因此迭代 vector 上的操作看起来有点像这样。
最佳答案
inline
只是对编译器的提示。编译器是否实际内联函数是一个不同的问题。对于 gcc,有一个 always inline 属性来强制执行此操作。
__attribute__((always_inline));
通过始终内联,你应该实现你所描述的(代码生成就像它写在一个函数中一样)。
但是,对于编译器应用的所有优化和转换,您只有检查生成的代码(程序集)才能确定
关于c++ - 从内联函数调用内联函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323325/