我了解到以这种方式使用auto声明变量
auto var = expr;
基本上就像采用expr
的类型和剥离& /&& -references以及它的所有顶级常量和不稳定性。这是否意味着上面的行完全等同于以下内容?
std::remove_cv<std::remove_ref<decltype(expr)>::type>::type var = expr;
答案 0 :(得分:10)
不,那不是真的。 auto var = expr;
更像是按值传递expr
。
int x[1];
auto y = x;
这使y
成为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;
。