我在代碼中需要一些小的幫助函數。 爲了工作,他們需要用一些數據初始化一次。 我應該在哪裏存儲init數據?初始值通過使用(有點)全局變量與靜態函數變量?
我已經想出了兩種方法:
我創造,我設置了專門的setter函數,然後在我的輔助函數使用helper.cpp文件範圍的靜態變量。
static int _initData = 0;
void initHelpMe(int initData)
{
_initData = initData;
}
void helpMe()
{
doSomethingWith(_initData);
}
或者我在原輔助函數中使用了一個靜態函數變量,並在其中使用了默認參數。
void helpMe(int initData = 0)
{
static int _initData = 0;
if (initData != 0)
_initData = initData;
doSomethingWith(_initData);
}
(允許asume 0是initData的有效數據範圍的外側,並且我還沒有示出的附加代碼,以確保一個錯誤,當被調用的函數的第一次沒有首先發起它被擡起。 )
這兩種方法的優缺點是什麼?還有更好的方法嗎?
我當然喜歡第二種方法,因爲它將所有的功能保留在一個地方。但是我已經知道它不是線程安全的(這不是a.t.m的問題)。
而且,爲了讓這個更有趣,雖然是C++,但這不是用於面向對象的,而是用於程序代碼。所以請不要回答提議的對象或課程。試想一下C語言的C語言。
第三種解決方案僅限於C++ 11,對不對?我知道至少lambda函數是,但我不知道std :: call_once本身。 –
@ Chaos_99是的,線程也是。 –