当我在几个翻译单元中调用以下内联函数时,我对“引擎盖下”究竟发生了什么感兴趣。内嵌函数中的静态变量
namespace some_name
{
inline const float& get_float()
{
static const float a = 5.0f;
return a;
}
}
我的目的是创建一个外部连接的变量“a”,其可以在整个代码中使用(如果包括与命名空间中的报头),而且还我想防止任何改变这个变量。从测试看来,我似乎成功了,但是我对第一次和接下来几次调用此函数时发生的事情感兴趣。
其他问题我是否用静态变量声明/定义来污染全局名称空间?
作为使函数返回静态常量浮点数的一种替代方法,为什么不把它作为类的成员变量,甚至是命名空间;它仍然是const ... – UKMonkey
UKMonkey我不确定,如果我这样做,那么每次我在不同的翻译单元中使用该变量时,我会得到一个const float类型的副本。 – user3271640
你确定这种方式'a'是外部链接吗?为什么你甚至需要一个外部连接的常量?外部链接表明多个编译单元共享变量的一个实例,当它变化时,每个单元都会读取更新后的值。但恒定不会改变。而且,在许多情况下,编译器会将常数值直接嵌入到指令中,以至于它甚至不会出现在内存中。 –