このコードは、私が望むやり方でコンパイルして動作させますが、なぜですか?プライベート静的メンバーを初期化するときにプライベート静的メソッドを呼び出すことが許可されるのはなぜですか?
#include <iostream>
class Test {
private:
static bool _inited;
static bool _init() {
std::cout << "init!" << std::endl;
return true;
}
};
bool Test::_inited = Test::_init();
int main(int argc, char** argv) {
}
そして私は私が考えるものを作る場合は、無関係な変更ではありません:
bool _inited = Test::_init();
それはもはや私のプライベートメソッドを呼び出そうとについての予想されるエラーを与えて、コンパイルします。
'Test :: _ inited'は' Test'クラスの一部です(静的データメンバ 'Test :: _ inited'の定義です) – milleniumbug
' bool_inited = Test :: _ init(); 'それは無関係ではありません。メンバーの価値を他のものに与えることを試みるのではなく、単にクラスの外にメンバーを定義するだけです。 – George
おそらく、それが最初のバージョンで動作するとは思わない理由を説明するのに役立ちます。 – Matt