【初心者歓迎】C/C++室 Ver.12【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0397デフォルトの名無しさん
NGNG意訳になるけど、
ユーザー定義型のstaticデータメンバが初期化されるのが保証されているのは
staticメンバの定義があるのと同じコンパイル単位の、non-inline関数が呼び出される前だから、
もし別のコンパイル単位からnon-inline関数を呼び出す前にinline関数を呼び出してしまうと
初期化される前にstaticメンバを利用してしまう可能性がある
らしい。日本語版は売り切れてて持ってないから間違ってるかもしれない(´・ω・`)
サンプルソースを引用すると
// Hoge.hpp
class Hoge {
public:
static void f() throw();
static string g() throw();
private:
string s_;
};
inline string Hoge::g() throw() { cout << s_; return s_; }
// Hoge.cpp
#include "Hoge.hpp"
string Hoge::s_ = "Hello";
void Hoge::f() throw() { cout << s_; } // OK 初期化は保証されている
// main.cpp
#include "Hoge.hpp"
int main() { Hoge::g(); } // s_は初期化されているか?
■ このスレッドは過去ログ倉庫に格納されています