В чем разница между auto и decltype (auto) при возврате из функции?

Я редко вижу decltype(auto) но когда я это делаю, это смущает меня, потому что, кажется, делает то же самое, что и auto при возвращении из функции.

auto g() { return expr; }
decltype(auto) g() { return expr; }

В чем разница между этими двумя синтаксисами?

35

Решение

auto следует правилам вывода аргументов шаблона и всегда является типом объекта; decltype(auto) следует за decltype правила определения ссылочных типов на основе категорий значений. Так что если у нас есть

int x;
int && f();

затем

expression    auto       decltype(auto)
----------------------------------------
10            int        int
x             int        int
(x)           int        int &
f()           int        int &&
41

Другие решения

auto возвращает тип значения, который будет выведен из return пункт к auto переменная. decltype(auto) возвращает тип, который вы получили бы, если бы вы завернули предложение return в decltype,

auto возвращает по значению, decltype возможно, нет.

8

По вопросам рекламы [email protected]