次のインライン関数が複数の翻訳単位で呼び出された場合、正確に何が起こっているのか興味があります。インライン関数の静的変数
namespace some_name
{
inline const float& get_float()
{
static const float a = 5.0f;
return a;
}
}
私の意図は、(名前空間を持つヘッダが含まれている場合)、コード全体で使用することができ、「」外部リンク変数を作成することでしたが、また、私は、この変数に何らかの変化を防止したかったです。テストから、私は成功したようですが、私はこの関数を初めて呼び出すとき、次に何度も呼び出すときに何が起こるのかに興味があります。
その他の質問:静的変数宣言/定義でグローバルな名前空間を汚染していますか?
static const floatを返す関数を作成する代わりに、それをクラスのメンバ変数または名前空間のメンバ変数にするだけではいかがですか。それはまだconstです... – UKMonkey
UKMonkey私はそれが好きなら、私は別の翻訳単位で変数を使用するたびにconst float型のコピーを取得するたびに私は確信していませんでした。 – user3271640
このように 'a'が外部リンクされていると確信していますか?そしてなぜあなたは外部リンクされた定数が必要なのでしょうか?外部リンケージは、複数のコンパイル単位が変数の1つのインスタンスを共有し、変更されたときにすべてのユニットが更新された値を読み取ることを示唆しています。しかし定数は変化するとは考えられない。さらに、多くの場合、コンパイラは定数値を命令に直接埋め込むため、メモリには表示されません。 –