В чем разница между auto и decltype (auto) при возврате из функции?
Я редко вижу decltype(auto)
, но когда я это делаю, он меня смущает, потому что при возврате из функции он делает то же самое, что и auto
.
auto g() { return expr; }
decltype(auto) g() { return expr; }
В чем разница между этими двумя синтаксисами?
Ответы
Ответ 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
возможно, нет.