yohhoyの日記

技術的メモをしていきたい日記

C++2c

Read-Copy Update @ C++26

C++2c(C++26)標準ライブラリに追加される<rcu>ヘッダについて。Read copy updateの略。 // C++2c #include <atomic> #include <mutex> // scoped_lock #include <rcu> struct Data { int m1; /*...*/ }; std::atomic<Data*> data_; // new確保された初期値が別途設定される前提 void multiple</data*></rcu></mutex></atomic></rcu>…

std::submdspan関数

C++2c(C++26)標準ライブラリに追加される多次元部分ビューstd::submdspanについて。 // <mdspan>ヘッダ namespace std { template< class T, class E, class L, class A, class... SliceSpecifiers> constexpr auto submdspan( const mdspan<T, E, L, A>& src, SliceSpecifiers..</t,></mdspan>…

関数戻り値の破棄を明示

プログラミング言語C++において、nodiscard属性が指定された関数に対し意図的な戻り値破棄を明示する方法。まとめ: C++23現在は、方式(3) std::ignoreへの関数戻り値代入が実践的か。*1 C++2c(C++26)以降は、方式(4) プレースホルダ識別子_(アンダースコア…

std::mdspan AccessorPolicy応用例

C++23標準ライブラリの多次元ビューstd::mdspan(→id:yohhoy:20230303)における、第4テンプレートパラメータAcssesorPolicyを用いた要素アクセスカスタマイズの具体事例。C++2c(C++26)標準ライブラリ採用が決定している線形代数基本アルゴリズム <linalg> ヘッダで</linalg>…

飽和演算サポート @ C++26

C++2c(C++26)標準ライブラリに追加される飽和演算(saturation arithmetic)サポートについてメモ。 // C++2c <numeric>ヘッダ namespace std { // T,U = 符号付き整数型 or 符号無し整数型 template<class T> constexpr T add_sat(T x, T y) noexcept; template<class T> constexpr T sub</class></class></numeric>…

NEO assertマクロ

プログラミング言語C/C++の次期標準規格C2x(C23)およびC++2c(C++26)では、アサーションマクロassertの改善が行われる。 #include <assert.h> // C/C++ #include <cassert> // C++のみ int is_valid(int); assert( "42 shall be vaild", is_valid(42) ); // NG: C17/C++20現在 //</cassert></assert.h>…

std::mdspan

C++2b(C++23)標準ライブラリに追加される多次元ビューstd::mdspanについて。multidimensional spanの略。 // <mdspan>ヘッダ namespace std { template< class ElementType, class Extents, class LayoutPolicy = layout_right, class AccessorPolicy = default_acce</mdspan>…

#embedディレクティブ

プログラミング言語Cの次期C2x(C23)言語仕様に追加される#embedディレクティブについて。外部ファイルをバイナリデータとしてプログラムに埋込む機能。下記コードは、外部PNGファイル内容を生成プログラム中のuint8_t型配列として埋め込む例*1 *2。C17現在は…