用于性能的C ++中的extern内联函数

时间:2015-05-20 10:29:02

标签: c++ objective-c

我有以下情况 我有一个.cpp文件(我需要在Objective-C ++ .mm中实际使用它们):

#include <utility>

bool g_ready;
std::pair<int, bool> g_pair;

extern inline bool& isReady()
{
    return g_ready;
}
extern inline std::pair<int, bool>& GetPair()
{
    return g_pair;
}

extern inline void SetPair(int i, bool b)
{
    g_pair.first = i;
    g_pair.second = b;
}

然后我在另一个.cpp文件中使用这些:

#include <iostream>

extern inline bool& isReady();

extern inline std::pair<int, bool>& GetPair();

extern inline void SetPair(int i, bool b);

void update()
{
    if (isReady())
    {
         SetPair(5, false);
         std::cout << "<" << GetPair().first << "," << GetPair().second << ">" << std::endl;
         SetPair(1, true);
         std::cout << "<" << GetPair().first << "," << GetPair().second << ">" << std::endl;
    }
}

我需要在每个帧调用的Update循环中调用这些函数。这是最佳解决方案吗?这些实际上是否会在没有任何运行时开销的情况下内联?

编辑:生产编译器是Clang for iOS。

1 个答案:

答案 0 :(得分:0)

  

这是最佳解决方案吗?

没有。必须在使用它们的每个翻译单元中定义内联函数,无论它们是否具有外部链接(默认情况下它们将是这样,而无需指定extern)。出于这个原因,您的代码会给我一个链接错误。

  

这些实际上是否会在没有任何运行时开销的情况下内联?

这取决于编译器。短inline个函数(必须在与调用相同的单元中定义)通常是;如果编译器支持链接时优化,则只能内联其他翻译单元中的函数。