C++20ライブラリ機能 読書会vol.37
https://scrapbox.io/files/655e07307255b8001c015b72.png
開催日時
2024年11月6日(水) 21:00~22:30
開催URL
参加人数
6人
ウォーミングアップ
三方比較演算ってどう使うの?
使用例
operator==を実装するのにラクをした
14. <compare>
14.3 比較関数オブジェクト
std:compare_three_way
std::compare_three_wayの #typo なんでcompare_three_wayを使えばUBではなく合法なの?
GCCのライブラリなどが内部で使っているから?
単にforwardして<=>演算子を使っているだけに見える
直接<=>を使うのとそんなに変わらない気がする
code: cpp
int n1 = 10, n2 = 20;
auto c1 = std::strong_order(n1, n2); // strong_ordering::less
auto c2 = std::weak_order(n1, n2); // weak_ordering::less
auto c3 = std::partial_order(n1, n2); // partial_ordering::less
比較した結果c1の値はstrong_ordering::lessという意味
Hidden friends関数
実質グローバル関数だが以下の点が異なる
カプセル化の維持
グローバル名前空間を汚染しない
グローバル直下に関数を用意しなくてもADL呼び出しでいい感じに呼び出してくれる
hidden friends関数を用意したのにstd::strong_order(s1, s2)でstdのstrong_orderを呼ぶの?
std::strong_orderの中で用意したhidden friends関数が呼び出される
て順序付けけされます
p.215 std::strong_orderの場合は次のような順序付けが行われます
次回ここから
お悩み雑談室
次回読みたい本
いろいろなパターンをC++で実装する方法に驚いた