2024/5/4(土)

cpprefjpを読み進めた。「畳み込み式」から「厳密な式の評価順」まで。

畳み込み式

知ってるけど使わないなあ。そもそもパラメータパックを使うようなライブラリを整備することがない。使うことになったら使うと思う。直感的な記法だが、二項畳み込みが左畳み込みか右畳み込みか、packの名前を見ないと判断できないのがちょっと厳しいなと思う。

波括弧初期化の型推論の新規則

ちょっとややこしいが、いい変更に思える。変数に直接波かっこが付いてたらそれはinitializer_listではないと断定できるのがうれしい。それまでだとMyClass hoge{1, 2, 3}の型名をautoにしてauto hoge{1, 2, 3}にしただけでinitializer_listが爆誕していたわけで、これは混乱する。

構造化束縛

これはよく使う。しかしネスト構造の分解と使わない値を捨てられないのがやはりちょっと辛い。使わない値を捨てるのはC++26で入るらしいので楽しみだ。

属性の名前空間指定に繰り返しをなくす

属性の名前空間って何????属性はユーザー定義できないはず。コンパイラ依存で属性を定義することはできるのでそれについての話、ということだろうか。

「C++11 属性構文」の記事をよく読んだら「ユーザーは任意の属性を定義できない。属性の定義は、標準およびベンダーが行う。」と明記されていた。

変数テンプレートのデフォルトテンプレート引数を許可

今まで関数やクラステンプレートにはできてたのに変数テンプレートにはできなかったのか…

名前空間と列挙子への属性付加を許可

今まで出来なかったんかいその2。

参照メンバをもつクラスの置き換え

そもそも!!そんなの!!!やるな!!!!ボケ!!!!!

と思ったが、std::optionalみたいなやつを作る際にはどうしても任意のユーザー型を考慮しないといけなくなるからこういうのが欲しくなるのか。10分くらい考えてようやく理解した。動機は理解したけど使いこなせる気はしない。

厳密な式の評価順

なんで+とか-とかは厳密に規定せず+=とかは規定するのか、と思ったが背景・経緯の説明で理解した。動作の不定性を解決したいが、加減乗除の評価順序とかまで規定したら最適化がかけにくくなってしまう。それでこの辺りだけ規定したのだろう。しかしシフト演算はストリーム演算子とか言うやつのとばっちりじゃないか。

Categories: