使用靜態數據成員作爲默認參數值時,我需要擔心static initialization order fiasco嗎?例如:作爲C++默認參數,靜態數據成員是否安全?
class Thing {
static double const default_blarg; // initialized in another file
void run(double blarg=default_blarg);
};
我知道default_blarg
將在鏈接時間多數爲不特定點進行初始化,但我不知道什麼時候默認參數run
被初始化。如果它在某個時候可能在default_blarg
被初始化之前,我可以使用什麼方法來安全地將默認值作爲類接口的一部分公開,而不重複它?將使用constexpr
爲靜態數據成員使它安全嗎?
請注意,如果default_blarg
不是const(這就是它的原因),我知道這可能會產生一些非常混亂的行爲,而且我沒有試圖使用非靜態數據成員。