Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

int x;
int && f();

затем

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

Ответ 2

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

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