I.22 Various issues
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 35/100
- issue の種類
- ドキュメント
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- cpp
調査の方向性
まず、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 はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
isocpp/CppCoreGuidelines のほかの issue
-
難易度 1/5 1〜3時間 初心者へのやさしさ 75/100
isocpp/CppCoreGuidelines#2338 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
isocpp/CppCoreGuidelines#2205 · コメント 8 件 ·
-
難易度 1/5 1時間未満 初心者へのやさしさ 64/100
isocpp/CppCoreGuidelines#1649 · コメント 3 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 42/100
isocpp/CppCoreGuidelines#2336 · コメント 4 件 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
isocpp/CppCoreGuidelines#2335 · コメント 2 件 ·
isocpp/CppCoreGuidelines の issue をすべて見る
似ている issue
-
bug documentation
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
ClickHouse/clickhouse-cs#638 ·
メンテナーはふだん 1 日以内に返信
-
Création-JDV
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
githubnext/gh-aw-workshop#4046 ·
メンテナーはふだん 1 日以内に返信
-
specification
難易度 1/5 1〜3時間 初心者へのやさしさ 78/100
WICG/webmonetization#751 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
stratum-mining/sv2-ui#294 ·
メンテナーはふだん 7 日以内に返信