Wat is het verschil tussen auto en decltype(auto) bij terugkeer van een functie?

Ik zie decltype(auto)zelden, maar als ik dat doe, verwart het me omdat het hetzelfde lijkt te doen als autowanneer 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%

autovolgt 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%

autoretourneert 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 decltypezou inpakken.

autoretourneert op waarde, decltypemisschien niet.

Other episodes