【发布时间】:2017-09-02 12:21:17
【问题描述】:
我对在多个翻译单元中调用以下内联函数时“幕后”究竟发生了什么感兴趣。
namespace some_name
{
inline const float& get_float()
{
static const float a = 5.0f;
return a;
}
}
我的目的是创建一个外部链接变量“a”,它可以在代码中使用(如果包含名称空间的标头),但我也想防止对这个变量进行任何更改。从测试来看,我似乎成功了,但我对第一次调用此函数以及接下来的几次调用时究竟发生了什么感兴趣。
附加问题:我是否使用静态变量声明/定义污染了全局命名空间?
【问题讨论】:
-
作为使函数返回静态 const float 的替代方法,为什么不将其作为类的成员变量,甚至是命名空间的成员变量;它仍然是常量...
-
UKMonkey 我不确定,如果我这样做,那么每次我在不同的翻译单元中使用变量时,我都会得到一个 const float 类型的副本。
-
你确定
a这种方式是外联的吗?为什么你甚至需要一个外部链接的常量?外部链接建议多个编译单元共享一个变量的一个实例,当它发生变化时,每个单元都会读取更新后的值。但预计常数不会改变。此外,在许多情况下,编译器会将常量值直接嵌入到指令中,这样它甚至不会出现在内存中。 -
如果您有兴趣一探究竟,这里并不神秘。大多数编译器可以为您提供他们为此生成的代码的汇编级视图。
标签: c++ static inline inline-functions