ExerciseC++読書会 vol.3
#ExerciseC++
https://scrapbox.io/files/6983353470707df9ae4835e5.png
開催日時
2026年3月31日(火) 19:30~21:00
開催URL
https://cpp-osaka.connpass.com/event/386623/
参加人数
5人
ウォーミングアップ
パズル6
悪意を感じる例題
悪意があるのはC++の仕様では?
メンバ初期化子リストを禁止してコンストラクタ本文だけで記述しろ一派が居ても強く言えない
デフォルトコンストラクタで余計な処理を行わない前提
標準ライブラリの実装はコンストラクタでメモリ確保など余計なことはしない設計
reorderの警告はエラーにしちゃった方がいい
パズル7
code: text
Created global
Created local
Created local static
Destroyed local
Destroyed local static
Destroyed global
↑正解
constexpr=中3女子
なつかしい・・・
知らない人に経緯を説明するとわけわからんな
なぜか縄文土器の話が出てくる
今思うとあの当時のconstexpr制限のなかでよくコンパイル時レイトレーシングできたな
Connectionのコンストラクタはconstexprではなく(std::coutに出力するため、constexprにはできない)
Connectionコンストラクタ自体はconstexpr修飾を付けれるけどstd::coutはconstexprに対応していないので実際にコンパイル時には処理されず、実行時に処理される
constexprは付け得?
浮動小数点数がコンパイル時と実行時で値が変わる可能性があるので注意
そもそもfloatを==で比較するな
るが、異なる翻訳単位内では、グローバル変数は
「異なる翻訳単位間では」p.35 #typo
が初期化された状態のままだという保証はない
ちょっと言い回しが変
初期化されている保証はないくらいの方がわかりやすい
local staticが複数あった場合
この場合でも順序のルールは同じで先に初期化されたのと逆の順で破棄される
内部実装的にはatexitで登録しているだけ
https://cpprefjp.github.io/reference/cstdlib/atexit.html
グローバル変数初期化の中でstatic localが合ったりするケース
破棄順どうなるの・・・?
実験し甲斐がある
パズル8
次回ここから
お悩み雑談室
1つの巨大ソースファイルをきれいに分割したい
どうしたらいい
でかいクラスの処理の一部分のサブクラスに抽出するイメージ
バグらせるのが怖い
テストで保証
VSのF12ジャンプが効かないことがある
grep(全文検索)
つい全文検索のことをgrepと言ってしまうおじさん
Ctrl+Shift+Fで出てくるダイアログから検索
どちらにせよコメントの文字列もヒットする
あるいはそれ用の外部ツールを使用する
Doxygenのコールグラフ