使用API​​的内联函数

时间:2013-04-25 16:00:35

标签: c++ optimization inline multiplatform

我想创建一个API,在调用函数时,例如getCPUusage(),重定向到Windows或Linux的getCPUusage()函数。 所以我正在使用粘贴文件api.h

getCPUusage() {
    #ifdef WIN32
        getCPUusage_windows();
    #endif
    #ifdef __gnu_linux__
       getCPUusage_linux();
    #endif
} 

所以我想知道使用inline是否会有更好的解决方案,因为我拥有的内容会更大。

我的问题如下:在这种情况下,为每次通话使用内联函数会更好吗?

2 个答案:

答案 0 :(得分:1)

这取决于您的程序的用例。如果消费者仍然是c ++ - 那么内联是有道理的。 但是假设您想在C,Pascal,Java中重用它...在这种情况下,内联不是一种情况。调用者必须通过lib导出一些稳定的名称,但不能从头文件导出。 Lib for linux相当透明,而在Windows上,您需要应用__dllexport关键字 - 这不适用于inline

答案 1 :(得分:0)

答案是:是的,确实更有效率,但可能不值得:

如果您将这些功能放在一个类中,则不需要在您的情况下记下“inline”关键字,因为您只有一个头文件(您没有任何cpp文件 - 根据对你的描述)。 在类定义中(在头文件中)实现的函数将被编译器自动视为内联函数。但请注意,这只是编译器的“提示”。如果发现(通过编译器)更高效,编译器仍可能决定使您的函数非内联。对于像你这样的小函数,它很可能产生实际的内联函数。

如果你没有把这些功能放在一个类中,我认为你也不应该费心添加内联,因为(如上所述)它只是一个“提示”,即使没有那些“提示”,现代编译器也会弄清楚无论如何要内联的功能。无论如何,人类对这些事情更可能是错误的。