yohhoyの日記

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

2024-01-01から1年間の記事一覧

16進文字から数値への変換: ch - 'a' + 10

C C2y

プログラミング言語Cの次期仕様C2yでは、16進数表記で用いられるアルファベット文字範囲'a'~'f'および'A'~'F'について文字コードの連続性保証が明文化される。この文字コード範囲での連続性保証は、ラテンアルファベット26文字 A~Z / a~z が連続配置され…

std::array<T, 0>

C++

C++標準ライブラリの固定長配列型std::array<T, N>では、要素数ゼロN == 0が明示的に許容される。一方で、C++言語組込の配列型においては要素数ゼロが許容されない。*1C++11 8.3.4/p1, 23.3.2.8より一部引用。 In a declaration T D where D has the form D1 [ con</t,>…

配列添字演算子の小さな改善案 for C2y

C2y

プログラミング言語Cにおける配列添字演算子(array subscript operator)[]の伝統的かつ奇妙な言語仕様に関して、次期C2yをターゲットとした仕様修正が提案されている。小ネタ以外の使い道もなく修正されて良い頃合いかもね?*1 const char msg[] = "Hello"; …

C++ std::strong_orderと浮動小数点数型totalOrder

C++

C++20標準ライブラリのstd::strong_order関数オブジェクト*1は、IEEE 754準拠の浮動小数点数型に対する全順序比較(totalOrder predicate)を実装する。 #include <compare> #include <concepts> #include <iostream> #include <limits> #include <map> #include <string> template<std::floating_point T> struct totalOrder { static_</std::floating_point></string></map></limits></iostream></concepts></compare>…

CUDAのメモリアライメント

CUDAアーキテクチャにおける自然なメモリアライメントは 256 バイト。CUDA提供のメモリ確保関数(cudaMalloc等)は、少なくとも 256 バイト・アライメントされたアドレスを返す。 Size and Alignment Requirement (snip) Any address of a variable residing…

インクリメント on 複素数

プログラミング言語Cの次期仕様C2yでは、複素数型(_Complex float/double/long double)に対するインクリメント/デクリメントが正式サポートされる。gcc/Clangでは独自拡張としてサポート済み。 _Complex double c = 41.; ++c; // OK: C2y assert(c == 42.);…

std::submdspanとメモリレイアウト変換

C++2c(C++26)多次元部分ビューstd::submdspan(→id:yohhoy:20240201)によるメモリレイアウト変換のチートシート。変換結果std::mdspan<T,E,L,A>(→id:yohhoy:20230303)のレイアウトポリシーLは、変換元レイアウトマッピングのsubmdspan_mappingカスタマイズポイント</t,e,l,a>…

構造化束縛 in 条件式 @ C++26

プログラミング言語C++の次期標準C++2c(C++26)から、if/while/for/switch構文の条件式(condition)部に構造化束縛(structured binding)を記述できる。 // C++2c if (auto [a, b] = func()) { // 関数戻り値からbool型への変換結果がtrueとなるときに限り // …

R.I.P. <strstream>ヘッダ

C++2c(C++26)標準ライブラリでは、ようやく <strstream> ヘッダが削除される。同ヘッダはC++ ISO標準化されたC++98当初から非推奨(deprecated)とされていた。代替機能として下記C++標準ヘッダが提供するクラス群を利用する。*1 <sstream> stringstream, istringstream, ostringst</sstream></strstream>…

struct.pack/unpack関数フォーマットにはメモリレイアウトを指定する

Python言語のstructモジュールでは、フォーマット指定先頭文字(@/=/<>/!)にてメモリレイアウト指定を明示すべき。パック(pack)/アンパック(unpack)フォーマット文字列の省略時デフォルトのメモリレイアウトは、Pythonプログラマの期待に反する可能性が高い…

MS-ERREF: Windows Error Codes

Windows OSのエラーコードに関するMicrosoft公式仕様書。HRESULT値/Win32エラーコード/NTSTATUS値を広範にカバーしている。 [MS-ERREF]: Windows Error Codes 関連URL HRESULT型からのエラーメッセージ取得 - yohhoyの日記

Passkey Idiom

C++

他クラスに対して “メンバ関数単位でのアクセス制限” を実現するイディオム。 template <class T> class Passkey { friend T; Passkey() {} }; class A; class B; class C { public: // クラスAに対してのみ公開 void mfA(Passkey<A>, int arg); // クラスBに対してのみ</a></class>…

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>…

GCC -pedanticオプション

GCCコンパイラの -pedantic オプションについてメモ。 pedantic 形容詞 〈侮蔑的〉〔文法・学問的なことなどについて〕重要でない事にこだわり過ぎる、学者ぶった、知識をひけらかす、衒学的な https://eow.alc.co.jp/search?q=pedantic GCC 2.95.3マニュア…

関数戻り値の破棄を明示

プログラミング言語C++において、nodiscard属性が指定された関数に対し意図的な戻り値破棄を明示する方法。2024-07-05追記:C++2c(C++26)において提案文書P2968R2が採択され*1、方式(3) std::ignoreへの戻り値代入は明確にwell-definedとされる。まとめ: C+…

std::mdspan AccessorPolicy応用例

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