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); }
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. –