C.48: Prefer default member initializers, also for non-constant initializers
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 25/100
- Tipo di issue
- Documentazione
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- documentation
Direzione di ricerca
Inizia con la linea guida C.48 nelle C++ Core Guidelines collegate e esamina la pull request della correzione proposta #2333. Il lavoro è completato quando viene affrontata la limitazione agli inizializzatori costanti, in modo che la linea guida copra chiaramente anche l’esempio di inizializzatore non costante.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The restriction "for constant initializers" on guideline C.48: Prefer default member initializers to member initializers in constructors for constant initializers appears unnecessary and undesirable.
For example, suppose a class has a creationTime member, that is initialized by now() in each of its constructors:
class MyContainer {
time_point<system_clock> creationTime; // No default member initializer! Looks BAD to me.
vector<int> data{};
public:
MyContainer() : creationTime{ system_clock::now() } {}
explicit MyContainer(size_t n) : creationTime{ system_clock::now() }, data(n) {}
MyContainer(initializer_list<int> values) : creationTime{ system_clock::now() }, data{ values } {}
};
It appears preferable to use a default member initializer for MyContainer::creationTime, even though now() is not a constant. As follows:
class MyContainer {
time_point<system_clock> creationTime{ system_clock::now() }; // Preferable, right?
vector<int> data{};
public:
MyContainer() = default;
explicit MyContainer(size_t n) : data(n) {}
MyContainer(initializer_list<int> values) : data{ values } {}
};
In this example, using a default member initializer also avoids unnecessary code repetition, and it allows defaulting the default constructor.
In general, the guideline appears applicable to both constant and non-constant initializers.
- Proposed fix: pull request #2333
- Lingua principale
- CSS
- Stelle
- 45.3k
- Fork
- 5.6k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di isocpp/CppCoreGuidelines
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 75/100
isocpp/CppCoreGuidelines#2338 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
isocpp/CppCoreGuidelines#2205 · 8 commenti ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 64/100
isocpp/CppCoreGuidelines#1649 · 3 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
isocpp/CppCoreGuidelines#2336 · 4 commenti ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
isocpp/CppCoreGuidelines#2335 · 2 commenti ·
Tutte le issue di isocpp/CppCoreGuidelines
Issue simili
-
sync-en
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
ACK_WAITING HELP_WANTED UPDATE_CS
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OWASP/CheatSheetSeries#2458 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
l3montree-dev/devguard#3101 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
I maintainer di solito rispondono entro 1 giorno
-
area/documentation status/need-triage
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
google-gemini/gemini-cli#29548 ·
I maintainer di solito rispondono entro 1 giorno