ExerciseC++読書会 vol.8
https://scrapbox.io/files/6983353470707df9ae4835e5.png
開催日時
2026年6月9日(火) 19:30~21:00
開催URL
参加人数
4人
ウォーミングアップ
パズル16
code: cpp
Two ints
Two ints // ←間違い
//引数intとfloatの2つならどうなる?
initializer_listが複数あった場合は?
より型が合う方が選ばれる
initializer_list引数が複数ある場合は特別扱いされず、単に2引数のコンストラクタと解決される
code: cpp
struct Container
{
Container(int, int)
{
std::cout << "Two ints\n";
}
Container(std::initializer_list<float>, std::initializer_list<int>)
{
std::cout << "std::initializer_list<float>\n";
}
};
Container container2{{1, 1}, {2, 2}};
初期化構文周りはどんどんややこしくなっている
エッジケースが死ぬほどある
そのケースを潰すために仕様がちょっとずつ変わっていく
今C++11に戻れるなら{}ではなく[]でinitializer_list初期化になるように提案してるはず
Container container2 = [1, 2];
踏み出した一歩の方向性が間違っていた
もう戻れない
この言語、初期化周りがダメな子
Container container2{1, 1};で=を省略できてしまうのもさらに初期化周りをややこしくしている
std::arrayの初期化も特殊
code: cpp
std::array<int, 3> arr{1,2,3};
//arrayはコンストラクタを持ってない
// コンパイラがしょぼいと以下のように波かっこを2つ書かないといけなかった
// std::array<int, 3> arr{{1,2,3}};
ハーブサッターおじさんが新しいシンタックスを提案
従来の構文に変換できるcppfront
パズル17
code: cpp
3
// これかコンパイルエラーのどちらかしかなくない?
vectorのストロングタイプを作ろうとすると面倒だった
明示するので記述が面倒
リフレクション入ったのでこれを使えばほぼ自動でできるのでは?
今思いついた
さすがに来週の発表には入らないか・・・
やっぱりダメかも
パズル18
次回ここから
お悩み雑談室