2024/5/8(水)

cpprefjpへのプルリクエストが通った。嬉しい。

https://github.com/cpprefjp/site/pull/1272


cpprefjpを読み進めた。

評価されない文脈での定数式評価によって特殊メンバ関数がインスタンス化されることを規定

評価されるときに初めて生成される=評価されないが参照はされる場合に死ぬというのを初めて認識した。それまでそんな仕様だったんだ。

評価されない文脈でのラムダ式

身近なところでどう嬉しいかあんまりピンとこなかったが、サンプルコードみたところstd::greater<T>みたいなやつをラムダ式で書けるようになってる??すごい!!

多分今までのだとstd::set<int, std::greater<int>>greater<int>みたいのをラムダ式で書こうと思うとdecltype(ラムダ式)の形になってしまうので無理だった…はず!!(自信がない)

要素数不明の配列への変換を許可

特に理由がないので許可とあったので笑った。そんなゆるっと許可されることあるんだ。

範囲for文がカスタマイゼーションポイントを見つけるルールを緩和

なかなかに細かい修正。まあでも頷ける。

符号付き整数型が2の補数表現であることを規定

これ保証されるんだ。前に古めの教書で「仕様上は0と別に-0が存在しうる」という話を読んだが、C++20ではもうそれは考えなくていい訳だ。しかしオーバーフローがmod 2^nになることは保証しないらしい。

mod 2^nが保証されるようになったような話も聞いた気がするのだが、暗黙の型変換時の話だった。

https://en.cppreference.com/w/cpp/language/implicit_conversion#Integral_conversions

空オブジェクトに対する最適化を支援する属性[[no_unique_address]]

空オブジェクトの扱い、やっぱり1バイト確保されてたんだ。そしてEBOとかいう仕様とそれを働かせるための派生クラスとかいう黒魔術があったのは初耳。黒魔術が1つ滅ぶ理由が出来て嬉しい。

確率が高い分岐と低い分岐を伝える属性 [[likely]], [[unlikely]]

これなかなか使いどころが難しそう。そんなに起きないエラー処理とかにビシビシ[[unlikely]]つけたりすればいいんだろうか。

状態を持たないラムダ式を、デフォルト構築可能、代入可能とする

できていいよなと思いつつ、出来ると具体的にどう便利か分からなかったのだが、最後の説明用コードで納得した。

特殊化のアクセスチェック

なんかちょっとなし崩し的な認められ方で嫌だな。変な例外条項っぽさがある。外から見えるようにするならpublicにするんじゃいかんのか?テンプレートパラメータにしたいけどそれ自体は外から見えて欲しくないみたいな感じなのか??

添字演算子内でのカンマ演算子の使用を非推奨化

C++23への良い布石だ。

Categories: