Weekly PPP Vol.68 | Programming Place Plus Weekly PPP

トップページWeekly PPP

Weekly PPP Vol.68 () 🔗

当サイトで扱っているテーマやそれに近しい分野から、直近1週間ぐらいの Web記事や書籍などの情報を紹介します。管理者が目を通したタイミングが遅いこともあるので、実際に公開された時期はもっと古い可能性があります。

「難易度」は、「入門」「初級」「中級」「上級」の4段階で、大体以下のような感覚で割り当てています。

当サイトで扱っているテーマから外れた情報については、Xはてなブックマークで扱っています。

本ページはアフィリエイトプログラムによる収益を得ています。ページ内のリンクから、各種販売サイトに移動して商品を購入されると、Programming Place 管理者に紹介料が支払われます。



C++26: The Oxford variadic comma | Sandor Dargo’s Blog 🔗

C++26 で、可変引数を表現する ... について、先行する , がない記述が非推奨となることを紹介しています。

void foo(int, ...);  // OK
void foo(int...);    // これも OK だったが、C++26 で非推奨

C言語では元々、, が必要であったため(C23 で固定の引数がなく、... のみとすることができることを除く)、C言語との互換性を向上させる意味があります。

また、C++11 で追加されたテンプレートパラメータパックの ... とは別の話で、テンプレートパラメータパックの場合は , がないため、両者のあいだで混乱を生じる可能性がありました。

関連ページ

Deriving Type Erasure | David Álvarez Rosa | Personal Website 🔗

C++17 で追加された std::any は、コピー可能なあらゆる型の値を保持でき、かつあとから異なる型の値を入れ直せるというユーティリティクラスです。そのようなクラスを実現するためのテクニックである型消去(type erasure)について解説しています。

この記事では、インターフェースによるポリモルフィズム(多態性)の実現、テンプレートによる実現を確認したのち、汎用的な型消去の実現方法へと段階的に導いていきます。

関連ページ

C++ Weekly - Ep 523 - Why I’m Still Using std::cout (on this channel) - YouTube 🔗

C++ Weekly の解説動画シリーズで標準出力を行う際に、新しい std::print() を使わずに、古い std::cout を使い続ける理由について解説しています。

std::print() は std::cout に比べて、圧倒的にコンパイルが遅く、生成されるバイナリコードが大きくなることを確認しています。

関連ページ

Why std::launder Exists (And That’s a Problem) - YouTube 🔗

C++17 で、std::launder() が追加されるにいたった理由、必要性を解説しています。

配置new を使って、const や参照型のデータメンバを含んだオブジェクトを構築した場合、書き換えられることがないはずの それらのデータメンバに対して、コンパイラが積極的な最適化を行うことにより、配置new が返したポインタを使用する際に未定義動作を生み出す恐れがあります。std::launder() を使うことで、未定義動作を正当に回避できるようになります。

関連ページ

Practical Guide to Bare Metal C++ « Adafruit Industries – Makers, hackers, artists, designers and engineers! 🔗

ベアメタルデバイス向けに C++ を使うための詳細なガイドである『Practical Guide to Bare Metal C++』と、汎用的なオープンソースなコンポーネント「embxx」を紹介しています。

関連ページ

Programming Place の更新履歴 🔗

当サイトでこの1週間に行った更新の内容を取り上げます。

過去のすべての更新履歴はこちらから

更新履歴 🔗





はてなブックマーク に保存 Facebook でシェア X で ポストフォロー
LINE で送る noteで書く rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー
先頭へ戻る