Свойство ref и cv-десорбции `auto`.
Я узнал, что объявление переменной с использованием auto таким образом
auto var = expr;
в основном походит на выбор типа expr
и снятие && & -references и всех констант верхнего уровня и летучести от него. Означает ли это, что указанная выше строка в точности эквивалентна следующему?
std::remove_cv<std::remove_ref<decltype(expr)>::type>::type var = expr;
Ответы
Ответ 1
Нет, это не так. auto var = expr;
больше похож на передачу expr
по значению.
int x[1];
auto y = x;
Это делает y
a int*
.
В основном auto x = expr;
ведет себя как вывод типа шаблона:
template <typename T>
void f(T);
int x[1];
f(x); // deduces T as int*
Это больше похоже на std::decay<decltype(expr)> var = expr;
.