Jos*_*vin 5 c++ gcc compilation g++ inline
GCC 具有函数属性 always_inline、noinline 和 flatten,可让您在定义函数时控制内联行为。我想知道是否有一种方法可以在调用函数时自定义内联行为,而不是像属性通常那样为其设置全局内联行为。
对于 noinline,我可以使用 noinline 属性将调用包装在 lambda 中,并立即调用 lambda。对于展平,我可以将函数包装在模板函数中,该模板函数具有调用底层函数的真/假特化,一个具有展平,一个没有。
但对于always_inline我没有这样的技巧。有吗?需要明确的是,我希望能够说应该内联特定的f()调用,而不是使其始终在任何地方内联。
您可以将原始函数定义为 inline with attribute always_inline,然后使用 attribute 定义另一个函数来noinline调用前者(noinline如果您仍想允许内联,则可以不定义)。当您希望内联调用时调用第一个函数,否则调用第二个函数。
示例(神螺栓):
#include <stdio.h>
__attribute__((always_inline))
inline void function_inlined()
{
puts("Hello");
}
__attribute__((noinline))
void function()
{
return function_inlined();
}
void test()
{
function_inlined();
function();
}
Run Code Online (Sandbox Code Playgroud)