2014-12-26 17 views
12

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)?

+3

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. –

risposta

9

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 un string mentre look_up_a_string_2 restituisce un string&.

decltype(auto) look_up_a_string_1() { auto str = lookup1(); return str; } 
decltype(auto) look_up_a_string_2() { auto str = lookup1(); return(str); }