関数の中のstatic変数
static変数は怖い。摩訶不思議。
const char* func(){ static std::string s; s = GetHoge(); return s.c_str(); }
を
const char* func(){ static std::string s = GetHoge(); return s.c_str(); }
にすると期待どうりに動かないだろう。
2/24 返り値の型まちがってたのを修正
なぜか?static変数の初期化は一度だけしか行われないからだ。
まあこれを書いた人の意図にもよるのではあるが、普通に考えると上記のfunc関数はGetHoge()で返されるstd::string型の文字列をstaticで取りconst char*型で返す型合わせの関数だと考えられる。本来こういう関数を書くべきではなく、マルチスレッドだとどうなるかわからない。けど致し方ないときもあるだろう。そしてこれを後者のように書いたなら、返す値は更新されず、いつかは無効なポインタを返すことになるだろう。