3 回答

TA貢獻1803條經驗 獲得超6個贊
要獲得與靜態構造函數等效的功能,您需要編寫一個單獨的普通類來保存靜態數據,然后創建該普通類的靜態實例。
class StaticStuff
{
std::vector<char> letters_;
public:
StaticStuff()
{
for (char c = 'a'; c <= 'z'; c++)
letters_.push_back(c);
}
// provide some way to get at letters_
};
class Elsewhere
{
static StaticStuff staticStuff; // constructor runs once, single instance
};

TA貢獻1872條經驗 獲得超4個贊
好吧,你可以擁有
class MyClass
{
public:
static vector<char> a;
static class _init
{
public:
_init() { for(char i='a'; i<='z'; i++) a.push_back(i); }
} _initializer;
};
不要忘了(在.cpp中):
vector<char> MyClass::a;
MyClass::_init MyClass::_initializer;
該程序仍將鏈接而沒有第二行,但是將不執行初始化程序。

TA貢獻1784條經驗 獲得超8個贊
C ++ 11解決方案
從C ++ 11開始,您可以簡單地使用lambda表達式初始化靜態類成員。如果您需要在各個靜態成員之間強加一個構造順序,或者如果您具有靜態成員,那么這甚至可以工作const。
頭文件:
class MyClass {
static const vector<char> letters;
static const size_t letterCount;
};
源文件:
// Initialize MyClass::letters by using a lambda expression.
const vector<char> MyClass::letters = [] {
vector<char> letters;
for (char c = 'a'; c <= 'z'; c++)
letters.push_back(c);
return letters;
}();
// The initialization order of static members is defined by the order of
// definition within the source file, so we can access MyClass::letters here.
const size_t MyClass::letterCount = letters.size();
- 3 回答
- 0 關注
- 605 瀏覽
添加回答
舉報