当サイトで扱っているテーマやそれに近しい分野から、直近1週間ぐらいの Web記事や書籍などの情報を紹介します。管理者が目を通したタイミングが遅いこともあるので、実際に公開された時期はもっと古い可能性があります。
「難易度」は、「入門」「初級」「中級」「上級」の4段階で、大体以下のような感覚で割り当てています。
当サイトで扱っているテーマから外れた情報については、X やはてなブックマークで扱っています。
本ページはアフィリエイトプログラムによる収益を得ています。ページ内のリンクから、各種販売サイトに移動して商品を購入されると、Programming Place 管理者に紹介料が支払われます。
C++26 で、可変引数を表現する ... について、先行する , がない記述が非推奨となることを紹介しています。
void foo(int, ...); // OK
void foo(int...); // これも OK だったが、C++26 で非推奨C言語では元々、, が必要であったため(C23 で固定の引数がなく、... のみとすることができることを除く)、C言語との互換性を向上させる意味があります。
また、C++11 で追加されたテンプレートパラメータパックの ... とは別の話で、テンプレートパラメータパックの場合は , がないため、両者のあいだで混乱を生じる可能性がありました。
C++17 で追加された std::any は、コピー可能なあらゆる型の値を保持でき、かつあとから異なる型の値を入れ直せるというユーティリティクラスです。そのようなクラスを実現するためのテクニックである型消去(type erasure)について解説しています。
この記事では、インターフェースによるポリモルフィズム(多態性)の実現、テンプレートによる実現を確認したのち、汎用的な型消去の実現方法へと段階的に導いていきます。
C++ Weekly の解説動画シリーズで標準出力を行う際に、新しい std::print() を使わずに、古い std::cout を使い続ける理由について解説しています。
std::print() は std::cout に比べて、圧倒的にコンパイルが遅く、生成されるバイナリコードが大きくなることを確認しています。
C++17 で、std::launder() が追加されるにいたった理由、必要性を解説しています。
配置new を使って、const や参照型のデータメンバを含んだオブジェクトを構築した場合、書き換えられることがないはずの それらのデータメンバに対して、コンパイラが積極的な最適化を行うことにより、配置new が返したポインタを使用する際に未定義動作を生み出す恐れがあります。std::launder() を使うことで、未定義動作を正当に回避できるようになります。
ベアメタルデバイス向けに C++ を使うための詳細なガイドである『Practical Guide to Bare Metal C++』と、汎用的なオープンソースなコンポーネント「embxx」を紹介しています。
当サイトでこの1週間に行った更新の内容を取り上げます。
| はてなブックマーク に保存 | Facebook でシェア | X で ポスト/フォロー |
| LINE で送る | noteで書く |
|
| 管理者情報 | プライバシーポリシー |