C++20 コア言語機能読書会vol.13
開催日時
2022年8月24日(水) 21:00~22:30
開催URL
参加人数
3人
ウォーミングアップ
前回の疑問
bool operator==(const C&, literal_zero)しか用意していないのに(0 == c)でこの演算子オーバーロードがよびだされるのはなんで?
C++20で導入された自動生成
「2.1.1 異種型間比較と比較演算子の自動生成」に書いてあった…
3.7 std::is_constant_evaluated()
コンパイル時と実行時で処理を切り替えることができる
xがマイナスの場合の挙動
別ファイルにconstexpr関数があったらコンパイル時に実行はできずにリンク時に実行になる?
そんなことはなかった
「constexpr関数は暗黙的にインラインとなる」
f()の書いてある内容
3.7.1 if consteval
「この挙動はかなり非直感的でした」
どういう意味?
先のint f()で、これは非constexpr関数なのに「if constexpr (std::is_constant_evaluated())」の評価がtrueになることを指している?
「関数引数iが定数式であるか否か」
consteval関数なら必ずコンパイル時に呼び出される
関数の引数であるiも定数式で表すことができる
constexpr関数なら実行時にも呼び出すことができる
実行時のことも考慮するとiは定数式にはできない
「書き方変えたからコンパイル通るようになりました」という書き方だと疑問が残る…
「if (std::is_constant_evaluated())」だとコンパイラ的にコンパイル時かどうか判別が難しいとかだと納得できるけど…
3.8 インラインアセンブリ
constexpr関数内にインラインアセンブリを書くことができるようになった
3.9 constinit
次回ここから
お悩み雑談室