decltype(auto)
può dedurre un valore e un riferimento. auto
non deduce mai un riferimento . Mi sembra che il codice generico e l'ottimizzazione decltype(auto)
dovrebbero essere sempre preferiti. È questo il caso? Si consideri ad esempio la restituzione di un oggetto che può o non può essere copiato. auto&
è necessario per evitare di copiarlo, ma questo lo costringe a fare sempre riferimento. decltype(auto)
è l'opzione corretta in questo caso. Quali sono gli svantaggi di decltype(auto)
oltre a una maggiore digitazione?Quasi sempre decltype (auto)?
risposta
Dal isocpp C++ 14 FAQ sul decltype(auto)
:
Nota: decltype (auto) è utile soprattutto per dedurre il tipo di ritorno di funzioni di inoltro e involucri simili, come sopra indicato, in cui si desidera che la digita esattamente per "tracciare" alcune espressioni che stai invocando. Tuttavia, decltype (auto) non è destinato ad essere una funzione ampiamente utilizzata al di là di questo. In particolare, sebbene possa essere usato per dichiarare variabili locali, farlo è probabilmente solo un antipattern dato che la reference-ness di una variabile locale non dovrebbe dipendere dall'espressione di inizializzazione. Inoltre, è sensibile a come si scrive la dichiarazione di ritorno. Queste due funzioni hanno diversi tipi di ritorno.
look_up_a_string_1
restituisce unstring
mentrelook_up_a_string_2
restituisce unstring&
.
decltype(auto) look_up_a_string_1() { auto str = lookup1(); return str; }
decltype(auto) look_up_a_string_2() { auto str = lookup1(); return(str); }
- 1. decltype vs auto
- 2. "Usa sempre Auto" in C++ 11?
- 3. Utilizzo di auto e decltype in C++ 11
- 4. Visual C++ 2015 avvisa C4552 quando utilizzato decltype (auto)
- 5. Perché sono MySQL query quasi sempre scritto nella Capitale
- 6. Facebook sharer che mostra (quasi) sempre all'autore sbagliato
- 7. Perché la cattura (eccezione) è quasi sempre una cattiva idea?
- 8. In C++, dovrei quasi sempre utilizzare l'ereditarietà virtuale?
- 9. confronto decltype
- 10. C++ 11 lambda a decltype
- 11. "Quasi divisibile"
- 12. Perché decltype non è implicito?
- 13. SFINAE decltype trucco operatore virgola
- 14. Perché decltype non vede la dichiarazione membro?
- 15. Usa decltype e std :: funzione con lambda
- 16. Cosa fa il 'void()' in 'auto f (params) -> decltype (..., void())'?
- 17. Parametri generici (quasi) auto-descrittivi in C++ accoppiato con una GUI?
- 18. decltype, result_of o typeof?
- 19. Comportamento di decltype
- 20. decltype per funzioni membro
- 21. Ottieni decltype of function
- 22. decltype e l'operatore scope in C++
- 23. Rimuovere riferimento decltype (ritorno T al posto di T & dove T & è il decltype)
- 24. pytest: affermare quasi uguale
- 25. Selettore CSS: quasi vuoto?
- 26. Lambda cattura di riferimento copiando e decltype
- 27. Utilizzo illuminante di C++ 11 decltype
- 28. tipi restituiti trailing, decltype e const-ness
- 29. decltype per metodo classe metodo
- 30. Differenza tra decltype e typeof?
Se la risposta qui sotto * * ha risposto alla tua domanda, il modo in cui funziona Stack overflow, si sarebbe "accettare" la risposta facendo clic sul segno di spunta accanto ad essa. Altro [qui] (/ aiuto/qualcuno-risponde). Altrimenti, postare un commento sulla domanda per chiedere chiarimenti. –