當我在幾個翻譯單元中調用以下內聯函數時,我對「引擎蓋下」究竟發生了什麼感興趣。內嵌函數中的靜態變量
namespace some_name
{
inline const float& get_float()
{
static const float a = 5.0f;
return a;
}
}
我的目的是創建一個外部連接的變量「a」,其可以在整個代碼中使用(如果包括與命名空間中的報頭),而且還我想防止任何改變這個變量。從測試看來,我似乎成功了,但是我對第一次和接下來幾次調用此函數時發生的事情感興趣。
其他問題我是否用靜態變量聲明/定義來污染全局名稱空間?
作爲使函數返回靜態常量浮點數的一種替代方法,爲什麼不把它作爲類的成員變量,甚至是命名空間;它仍然是const ... – UKMonkey
UKMonkey我不確定,如果我這樣做,那麼每次我在不同的翻譯單元中使用該變量時,我會得到一個const float類型的副本。 – user3271640
你確定這種方式'a'是外部鏈接嗎?爲什麼你甚至需要一個外部連接的常量?外部鏈接表明多個編譯單元共享變量的一個實例,當它變化時,每個單元都會讀取更新後的值。但恆定不會改變。而且,在許多情況下,編譯器會將常數值直接嵌入到指令中,以至於它甚至不會出現在內存中。 –