T.70 Prefer if constexpr to function template overloading
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- documentation
Direzione di ricerca
Inizia esaminando la regola T.70 proposta, i suoi esempi corretti e non corretti di min e le indicazioni F.3 collegate. L’issue non indica alcun file o test; per completarla sarebbe necessario concordare la formulazione della regola, gli esempi e le indicazioni per l’applicazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Here is a suggestion for a rule which encourages the use of if constexpr.
Not only do we repeat ourselves and keep logic less fragmented, we also save on compile times typically, because overload resolution is very expensive.
I'm not so sure if the recursive min example demonstrates it best, perhaps someone else can think of a better one.
T.70 Prefer if constexpr to function template overloading for short functions
Reason
- Overloading is complicated, and overload resolution is expensive.
- We repeat ourselves less.
- Logic is often simplified and in one place.
Example, good
template<typename Head, typename... Tail>
auto min(const Head& head, const Tail&... tail)
{
// can't be regular if-statement because else-block
// would fail to compile for empty Tail
if constexpr (sizeof...(Tail) == 0) { return head; }
else {
auto m = min(tail...);
return head < m ? head : m;
}
}
Example, bad
template<typename T>
auto min(const T& x) { return x; }
// bad: we've repeated the name "min", and must keep all function definitions in sync
template<typename Head, typename... Tail>
auto min(const Head& head, const Tail&... tail)
{
auto m = min(tail...);
return head < m ? head : m;
}
Note
Long function templates are difficult to read and understand. Consider F.3: Keep functions short and simple
Enforcement
Flag short, overloaded function templates.
- 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à 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à 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
community-request
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
NVIDIA-NeMo/Curator#2464 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue hacktoberfest
Difficoltà 2/5 1-3 ore Idoneità per principianti 87/100
elnachto/laya-triage#5 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
[integration]: InferrailApertaexternal
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
langchain-ai/docs#6328 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno