[英]Will this function only be called once?
這是我的計划的相關部分
// constants.h
extern const std::map<std::string, int> constMap;
// constants.cpp
std::map<std::string, int> initConstMap()
{
//stuff required to initialize constMap
}
const std::map<std::string, int> constMap = initConstMap();
\\ main.cpp
...
for (int i = 0, n = LOTS_OF TIMES; i < n; ++i){
doSomethingWith(constMap[i]);
}
...
我想知道,每當我在主程序中使用constMap變量時,它是否會每次都運行“initConstMap”函數? const映射顯然是常量,因此不需要多次初始化。 (*注意主要的cpp是一個制造的例子,它不是我的程序正在做的事情。我只是為了問題簡化了事情)。
是的,它只會被調用一次,如果你問這個特定的代碼片段 - 實際上它不能被調用更多次,因為它是const
,而const
禁止重新定義變量。 然而,你可以做的是將你的結構改為constexpr
,所以一切都在編譯時完成 - 這就是你所追求的。
如果你只調用一次,那么該函數只會被調用一次。 當調用初始化全局變量時,它也將在main
之前調用。
請注意,因此您不會遇到靜態初始化命令慘敗 。
如注釋中所述,您實際上可以計算調用initConstMap函數的次數,但查看代碼時,它只調用一次。
請注意,這意味着每次調用constants.cpp的相關部分時,因此根據程序的其余部分,可能會更頻繁地調用它。 當然,它不是從for循環中調用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.