如何保证函数在C++中内联



在C++中,可以使用inline关键字将函数定义为内联函数。这就像程序员要求编译器在调用函数的每个地方插入函数的完整体一样。

但据我所知,编纂者没有义务尊重这一要求。那么,有什么方法可以保证函数是内联的吗?

没有。实际上,内联函数是一个完整的实现细节,许多函数不能内联。这使得内联强制机制的存在变得不可能。即使是提供__forceinline(VC++)等关键字的编译器,在某些情况下也不会使用该限定符内联函数。页面上有一个关于滥用这个限定词的非常恰当的警告。

在VC++中使用__forceinline,在g++中使用__attribute__((always_inline))

由于这不在标准范围内,这取决于您使用的编译器。编译器的文档会告诉你是否有强制函数内联的功能,以及如何使用它。文档还应该告诉你该功能的限制,例如在非尾部位置的递归调用。

如果您使用的是Microsoft编译器,您可以使用__forceinline,如下所述:http://msdn.microsoft.com/en-us/library/z8y1yy88%28v=vs.71%29.aspx

我不知道有什么方法可以在g++或其他编译器中强制内联。

我无法想象有什么方法可以做到这一点。它主要取决于编译器。另一个解决方案是使用#define宏来定义函数

通过将函数的定义直接放在头中的声明中,函数获得最高的内联机会。

class TheClass
{
public:
    static void DoSomething () // declaration
    {
        // the function's code (definition) goes here
    };
};
// in the same header..
void DoOtherThings () // declaration
{
    // the function's code (definition) goes here
}

在任何情况下,即使您使用编译器特定的关键字进行内联强制,也没有强有力的保证。

100%的保证是将函数转换为C++宏,并使用该宏而不是引用该函数。如果函数有多行,请在"宏函数"中要换行的位置放置一个(后面跟着一个反斜杠的空格)。

相关内容

  • 没有找到相关文章

最新更新