Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

I.22 Various issues

オープン
#2,121 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
ドキュメント
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
cpp
領域
documentation

調査の方向性

まず、issue にリンクされている I.22 ルールを読み、zero-initialization と dynamic initialization の違いを確認します。現在の文言を、提案されている例外およびより広範な書き換えと比較します。ガイドラインが初期化の危険性を正確に説明し、許可されるケースを明確に定義できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Firstly, the explanation in I.22 says that one of the initializations access an uninitialized object. I believe that this is not correct, and instead, a zero-initialized object is accessed.

It's somewhat unclear whether "complex initialization" is supposed to mean dynamic initialization, though I would assume that it is intended to.

Dynamic initialization is not a problem in principle, and it can be quite beneficial. For example:

inline const std::array<double, 128> sin_table = [] {
    decltype(sin_table) result;
    for (std::size_t = 0; i < sin_table.size(); ++i) {
        result[i] = std::sin(std::numbers::pi * 2 * i / sin_table.size());
    }
    return sin_table;
}();

Until C++26, sin_table could not be constexpr, yet it's entirely reasonable and even best practice to use dynamic initialization, since the only alternative is hand-writing the initializer-list, or writing your own constexpr sin function1). Neither of these are very practical.

1)This would be a solution because only non-constexpr functions are meant to be flagged by the current Enforcement standards

Suggested Solution

(Easy) use zero-initialization and dynamic initialization correctly in the current wording, and add an exception for dynamic initialization that only accesses objects within the current TU, or functions which act as a "pseudo-constructor", such as the lambda above.

(Hard) additionally reword the rule in terms of Avoid dynamic initialization which relies on objects in other translation units

主要言語
CSS
スター
45.3k
フォーク
5.6k
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

isocpp/CppCoreGuidelines のほかの issue

isocpp/CppCoreGuidelines の issue をすべて見る

似ている issue

Documentation の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。