内联函数中的静态变量

时间:2017-04-07 07:52:05

标签: c++ static inline inline-functions

当我在几个翻译单元中调用以下内联函数时,我对“引擎盖下”到底发生了什么感兴趣。

namespace some_name
{
    inline const float& get_float()
    {
        static const float a = 5.0f;
        return a;
    }
}

我的目的是创建一个外部链接的变量'a',它可以在代码中使用(如果包含带有命名空间的头),但我也希望阻止对此变量的任何更改。从测试来看,我似乎成功了,但是我对第一次调用这个函数然后接下来几次调用时到底发生了什么感兴趣。

其他问题:我是否使用静态变量声明/定义来污染全局命名空间?

1 个答案:

答案 0 :(得分:0)

  

但我对第一次调用此函数然后接下来几次调用该函数时究竟发生了什么感兴趣。

初始化是静态的(在运行时不依赖于任何东西),因此可能在程序开始时执行。所有调用只返回对静态对象的引用。这些调用可能是内联扩展的,所以只需直接使用静态对象。

更简单的选择是在命名空间中使用全局变量。

  

其他问题:我是否使用静态变量声明/定义来污染全局命名空间?

没有。静态变量是本地的,因此不会污染任何命名空间。该功能本身会污染"污染"声明它的命名空间。