Ik zie decltype(auto)
zelden, maar als ik dat doe, verwart het me omdat het hetzelfde lijkt te doen als auto
wanneer ik terugkeer van een functie.
auto g() { return expr; }
decltype(auto) g() { return expr; }
Wat is het verschil tussen deze twee syntaxis?
Antwoord 1, autoriteit 100%
auto
volgt de deductieregels voor sjabloonargumenten en is altijd een objecttype; decltype(auto)
volgt de decltype
-regels voor het afleiden van referentietypes op basis van waardecategorieën. Dus als we hebben
int x;
int && f();
dan
expression auto decltype(auto)
----------------------------------------
10 int int
x int int
(x) int int &
f() int int &&
Antwoord 2, autoriteit 25%
auto
retourneert welk waardetype zou worden afgeleid als u de return
-clausule toewijst aan een auto
-variabele. decltype(auto)
geeft terug welk type je zou krijgen als je de return-clausule in decltype
zou inpakken.
auto
retourneert op waarde, decltype
misschien niet.