- 1 名前:デフォルトの名無しさん(ワッチョイ dfcf-HvS5) mailto:sage [2017/01/09(月) 14:49:27.56 ID:p96WJVyd0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part128 echo.2ch.net/test/read.cgi/tech/1480172629/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 9 名前:デフォルトの名無しさん (ワッチョイ fb04-nASw) [2017/01/09(月) 22:45:37.43 ID:cNtoCjW40.net]
- グローバルなstatic変数は(コンパイル単位が違うと)初期化タイミングが不定だから使うな
みたいな話がありますが、これはクラスメンバのstatic変数でも同じでしょうか。 やはり定番のローカルなstatic変数の参照を返すのがベストでしょうか?
- 10 名前:デフォルトの名無しさん (ワッチョイ df8e-KLRm) mailto:sage [2017/01/09(月) 23:42:53.87 ID:YmMsaSRh0.net]
- static int a = f();
↓ static int &get_unko() { static int a = f(); return a; } 問題解決になるとは到底思えない ちなみにクラスの静的メンバーでも同じ
- 11 名前:デフォルトの名無しさん (ワッチョイ 1b7b-p/5D) [2017/01/10(火) 00:09:01.54 ID:qNfJPVUt0.net]
- >>9
ベストは静的な寿命をもつ変数が別の静的な寿命を持つ変数を参照するような設計にしないこと やむを得ずそうなる場合はローカルなstatic変数の参照を返す方法がベター しかしそれも構築は初めて呼ばれた時になるが、破棄の順が不定なのは変わらずだから注意
- 12 名前:デフォルトの名無しさん (ワッチョイ dfcf-IbiL) mailto:sage [2017/01/10(火) 00:34:11.81 ID:kCG+Vhkl0.net]
- >>11
破棄準は構築と逆順になるよ。 [basic.start.term]
- 13 名前:デフォルトの名無しさん (ワッチョイ 1b7b-p/5D) [2017/01/10(火) 01:22:55.56 ID:qNfJPVUt0.net]
- >>12
ホンマやね メモリ上の配置と関係なしに構築した順番覚えてるのな。
- 14 名前:デフォルトの名無しさん (ワッチョイ 0f33-Flmg) [2017/01/10(火) 02:41:10.58 ID:YALu2HFR0.net]
- しかし、関数内で定義したstatic変数ってどうやって「一度のみ初期化」を実現してるんだろう?
規格上の明記は無いよね? もし、コード上に初期化フラグ的なものを保持して毎回判定してるのだとしたら、単純なグローバル変数よりアクセス遅くなるのかな?
|

|