C.21 appears to mandate the Rule of Five -- is that desirable?
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Documentazione
- Chiarezza
- Da chiarire
- Stato di attività
- Attiva
- Stack tecnologico
- cpp
- Ambito
- documentation
Direzione di ricerca
Inizia leggendo la regola C.21 attuale e il testo relativo all'applicazione, quindi esamina la discussione correlata in #2164 e i falsi positivi di clang-tidy citati. Confronta la formulazione proposta con la motivazione documentata e il comportamento precedente a C++11. Il lavoro è completato quando sono disponibili una decisione approvata da un maintainer e un testo aggiornato della linea guida, se viene accettata una modifica.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
See also #2164 where this issue is creating false positives in Guidelines checkers such as clang-tidy.
Problem
C.21 mandates the Rule of Five:
C.21: If you define or
=deleteany copy, move, or destructor function, define or=deletethem all
[...]
Enforcement
(Simple) A class should have a declaration (even a
=deleteone) for either all or none of the copy/move/destructor functions.
Is that too strong?
- Yes, this will catch some errors, as noted: "to avoid unwanted effects like turning all potential moves into more expensive copies, or making a class move-only." That's good.
- But this will also require programmers to write redundant boilerplate for classes that don't need it, such as classes that have user-written copy operations where move cannot be more efficient than copy and the programmer knows that writing only copy will cause move to be treated as copy for their type and know that's okay. Programmers hate being told to make code changes that they know don't change meaning just to satisfy a tool, and it's the kind of thing that causes them to disable a rule as noisy / low-value.
Note: The current rule and Enforcement would flag every pre-C++11 class with a user-defined copy operation.
One potential suggestion
The main noise seems to come from requiring explicit move operations. One change that could address #2164 and pre-C++11 types and most of the required-boilerplate cases would be to not require writing out move operations. Something like this:
C.21: If you define or
=deleteany copy, move, or destructor function, define or=deleteall copy and destructor operations
[...]
Enforcement
(Simple) A class should have a declaration (even a
=deleteone) for all copy/destructor functions if any copy/move/destructor function is user-declared.
We could also add a note along the lines of "and if you write a copy operation check whether you should also write a more-efficient move operation, to avoid turning all potential moves into more expensive copies" -- as a Note here, or as a separate guideline.
- 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 · 1 commento ·
-
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à 2/5 1-3 ore Idoneità per principianti 25/100
isocpp/CppCoreGuidelines#2332 · 2 commenti ·
Tutte le issue di isocpp/CppCoreGuidelines
Issue simili
-
https://search.utilibre.orgApertainstance instance add
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
searxng/searx-instances#941 · 1 commento ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
radius-project/ai-extensions#923 ·
I maintainer di solito rispondono entro 1 giorno
-
area: cli area: docs bug difficulty:2 help wanted S4: cosmetic
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
manaflow-ai/cmux#15710 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
FluidNumerics/fluid-walk-blocker#89 ·
I maintainer di solito rispondono entro 1 giorno
-
:watch: Not Triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno