ExerciseC++読書会 vol.4
#ExerciseC++
https://scrapbox.io/files/6983353470707df9ae4835e5.png
開催日時
2026年4月14日(火) 19:30~21:00
開催URL
https://cpp-osaka.connpass.com/event/390130/
参加人数
3人
ウォーミングアップ
パズル8
出力は"It moved!\n";以外なくね?
const Memberにconstがついているのがみそだった模様
問題は出力しか聞いていないけどコンストラクタ内にcoutを書いておいてほしかった
code: cpp
Member(const Member&&) { std::cout << "Member move ctor\n";} // こんなコンストラクタを用意すればこちらが優先して呼び出される(意味はない)
Member( const Member&&) = default; // こう書いてもコンパイラは作ってはくれなかった
moveと言いながらmoveしないという問題だった
コピーされるからコンパイルは通る
めでたしめでたし(?)
Memberのメンバ変数にstd::unique_ptrがあるとコピーしようとしてビルドエラーになることが確認できる
パズル9
RVOの話かな?
RVOの話だった
最大3回コピーが走るはずが、URVOのおかげで1回しかコピーされない
パズル10
これも出力自体は一意
右辺値へ代入しているケース
右辺値への代入を抑制する方法(自作クラス)
code: cpp
Member& operator=(const Member& other) & { return *this; }
Member& operator=(const Member& other) const & { return *this; }
Member& operator=(const Member& other) && = delete;
パズル11
次回ここから
お悩み雑談室