在函數(shù)中定義static變量時(shí)需要注意的問題
對于在頭文件中定義(不能只聲明)static的函數(shù) 或者 static的類成員函數(shù),需要注意的是,如果這個(gè)頭文件被不同的cpp包含,各自編譯出.o文件,那么*有可能*最后鏈接出來的可執(zhí)行文件種,會(huì)存在該static函數(shù)的多個(gè)副本,有三種情況會(huì)導(dǎo)致這樣的事情發(fā)生,而如果你在這種函數(shù)里面放置了static變量,那就悲催了,因?yàn)檫@個(gè)static對象會(huì)被搞出多個(gè)來(不再如你所愿,全局唯一了):
1。頭文件中定義了static函數(shù);
2。頭文件中定義了匿名namespace下的函數(shù);
3。頭文件中定義了匿名namespace下的類成員函數(shù);
所以,法門就是:不要在匿名的namespace下定義類,對于函數(shù)而言,用static聲明和放在匿名的namespace下是等同的。
對于在函數(shù)內(nèi)部聲明的static變量,編譯器默認(rèn)是會(huì)使得這樣的static變量在初始化時(shí)是線程安全的,控制它的選項(xiàng)是-fno-threadsafe-statics
posted on 2012-06-07 11:55 so true 閱讀(1266) 評論(0) 編輯 收藏 所屬分類: C&C++