C++ソフトウェア設計 読書会vol.16
https://scrapbox.io/files/677e58cd6851aa4933a854f0.jpeg
#C++ソフトウェア設計
開催日時
2025年9月3日(水) 21:00~22:30
開催URL
https://cpp-osaka.connpass.com/event/367165/
参加人数
6人
読み進め方
ウォーミングアップ
CとC++の演算優先
新人さんから質問された内容
CとC++で三項条件演算子の結合優先が変わるのはなぜですか?
私「えっ・・・?」
code: cpp
int main()
{
int a = 1;
int b = 2;
int c = 1 ? a : b = 3;
printf("a:%d\n", a);
printf("b:%d\n", b);
printf("c:%d\n", c);
}
a,b,cがどういう値になるかわかります?
C++
https://godbolt.org/z/zcq9vG6sW
C
https://godbolt.org/z/59G4Tf43b
加えて微妙に条件演算子がC++では左辺値を返すように変わっていそう
PHPの条件演算子はバージョンによって結合順が変化した
https://qiita.com/rana_kualu/items/0de1e406f72c0ef86432
こわっ
用語集
ISP
インタフェース分離の原則
ISP は SRP の特殊なケースと捉える。
SRP
単一責任の原則
OCP
開放/閉鎖原則
LSP
サブタイプ(派生クラス)が満たすべきふるまい
リスコフの置換原則 (ガイドライン6)
サブタイプでは事前条件を強化してはならない
サブタイプは事後条件を弱めてはならない
サブタイプの関数の戻り型は共変(covariance)でなければならない
サブタイプの関数パラメータは反変(contravariance)でなければならない
スーパタイプの不変条件はサブタイプでも維持されなければならない
DIP
依存関係逆転の原則(ガイドライン9)
依存関係を管理するには、具象型や実装詳細ではなく抽象化に依存すべきである
ガイドライン13:デザインパターンはどこにもある
monotonic_buffer_resourceの例
これallocaと同じことをしてるのか
スタックのメモリを使用する
_allocaが非推奨になってて_mallocaを使うように言われてる
_mallocaは場合によってヒープから確保するので_freeaが必要
https://cpprefjp.github.io/reference/memory_resource/monotonic_buffer_resource.html
memory_resourceの例
privateな純粋仮想関数。そんなものもあるのか
privateだから派生先からは呼び出せないけれどoverrideはできる
memory_resourceクラスからdo_~関数がおそらく呼び出される
[[nodiscard]]属性
ここからいろんなC++アトリビュートを見ていった
[[assume]] (C++23から)
https://cpprefjp.github.io/lang/cpp23/portable_assumptions.html
これアサートマクロを作って実行時に[[assume]]に置き換えたらいいんじゃない
↑天才
だからデザインパターンはオワコンじゃないよ、と言いたい著者
ちょっとこじつけ感
オワコンじゃないとは思うけれど取り立てて言うほどでもない
map, reduceの例
知ってる人と知らない人で生産性が違う
技術者間で「○○パターン」というだけで意思疎通ができるのが大きい
AIとのやり取りをする際にも名称を覚えているとやり取りしやすい
std::pmr::polymorphic_allocator
従来のstd::basic_stringやstd::vectorのアロケータインタフェースをつなぐ役割
ガイドライン14:デザインパターン名を用い目的を伝える
次回ここから
お悩み雑談室
PDFをWebPにラスタライズ化してる
https://poppler.freedesktop.org/
https://gitlab.freedesktop.org/poppler/poppler/-/blob/master/utils/pdffonts.cc?ref_type=heads
printf("%-36s", fontName ? fontName->c_str() : "[none]");
めっちゃ長いフォント名が来た時に表示が崩れる
どんな長さでも問題ないようにjsonを用いて可変長にしたい
https://github.com/nlohmann/json
ヘッダオンリー
今使っているライブラリ
いいJSONライブラリないですか?
色々な脱線話