簡體   English   中英

這個函數只會調用一次嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM