C++20 コア言語機能読書会vol.12
開催日時
2022年8月3日(水) 21:00~22:30
開催URL
参加人数
2人
ウォーミングアップ
3.5 トリビアルなデフォルト初期化
トリビアルなデフォルト初期化
以下について行われる初期化方法のこと(多分この構文解析であってるはず…)
組み込み型
クラス型
コンストラクタがない
デフォルトメンバ初期化のされていないメンバだけを持つ
何もしない初期化
入ってる値は不定
今まで定数式で現れたら問答無用で使えなかった
C++20からは不定な値を読み取らない限り、定数式でも使えるようになった
{}による初期化についておさらい中
「int a;」で0初期化されて、
「int a = <未初期化>;」みたいな記法で初期化しないみたいな挙動の方がはまりにくくてよさそう
従来の仕様を引きずってるから…
3.6 consteval
関数のみに付加できる
constexprをさらに強めてコンパイル時のみ実行することを保証できる
constexprだと気づかずに実行時に関数呼び出ししてしまうケースを防ぐことができる
3.6.1 consteval コンストラクタ
bool operator==(const C&, literal_zero)しか用意していないのに(0 == c)でこの演算子オーバーロードがよびだされるのはなんで?
friend指定に意味があるのかと思ったけれど、friend付けなくても挙動は変わらなかった
挙動を見ている限り、一致しているオーバーロードがなければ引数をひっくり返したオーバーロードを探して呼び出している?
3.7 std::is_constant_evaluated()
次回ここから
お悩み雑談室