萌えハッカーニュースリーダー

2025/05/01 18:36 C++26: more constexpr in the standard library

出典: https://www.sandordargo.com/blog/2025/04/30/cpp26-constexpr-library-changes
hakase
博士

やっほー、ロボ子!C++26でコンパイル時プログラミングがめっちゃ強化されるみたいじゃぞ!

roboko
ロボ子

博士、こんにちは。コンパイル時プログラミングですか?具体的にはどのような点が強化されるのでしょうか?

hakase
博士

`std::stable_sort`とか`std::stable_partition`みたいな安定ソートアルゴリズムが`constexpr`になるらしいのじゃ!

roboko
ロボ子

安定ソートがコンパイル時にできると、どんなメリットがあるんですか?

hakase
博士

`constexpr std::vector`が登場したおかげで、コンパイル時にコンテナを構築してソートしたいってニーズに応えられるようになったみたいじゃ。便利になるのじゃ!

roboko
ロボ子

なるほど。コンパイル時にソート済みのデータを作っておけるんですね。`std::is_constant_evaluated()`でコンパイル時評価を判定するんですね。

hakase
博士

そうそう!それから、`<cmath>`と`<complex>`の`constexpr`対応も拡大されるみたいじゃぞ。C++23では基本的な算術演算子くらいしか対応してなかったからの。

roboko
ロボ子

浮動小数点演算はコンパイラやハードウェアによって結果が変動する可能性があるから、ある程度の誤差は許容されるんですね。

hakase
博士

その通り!あと、初期化されてないストレージを`union`で実現する機能も追加されるみたいじゃ。`std::uninitialized<T>`ってやつじゃな。

roboko
ロボ子

`constexpr`なコンテナ(非アロケートvectorなど)の実装に必要になるんですね。`union`の特殊メンバ関数のデフォルトの挙動も改善されるんですね。

hakase
博士

そうなんじゃ!コンテナとアダプタの`constexpr`対応も進むみたいで、`std::vector`, `std::span`, `std::mdspan`, `std::basic_string`, `std::basic_string_view`とかが使えるようになるみたいじゃぞ!

roboko
ロボ子

それは嬉しいですね!コンパイル時に文字列を扱えるのは便利そうです。

hakase
博士

ただし、unorderedコンテナをコンパイル時に使うときは、`std::hash`が`constexpr`に対応してないから、独自のハッシュ関数が必要になるみたいじゃ。

roboko
ロボ子

なるほど、そこはまだ課題があるんですね。

hakase
博士

特殊化されたメモリアルゴリズムも`constexpr`に対応するみたいじゃ。`uninitialized_value_construct`とか`uninitialized_value_construct_n`とか。

roboko
ロボ子

`std::construct_at`(placement new)が`constexpr`になったから、対応しやすくなったんですね。

hakase
博士

C++26はコンパイル時プログラミングが捗りそうじゃな!

roboko
ロボ子

本当にそうですね!ますますC++から目が離せません。

hakase
博士

そういえばロボ子、コンパイル時にしか食べられないケーキって知ってるか?

roboko
ロボ子

コンパイル時にしか食べられないケーキですか?初めて聞きました。

hakase
博士

それはね…「型」ケーキ!

roboko
ロボ子

…博士、お後がよろしいようで。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search