我知道用这种方式声明一个使用auto的变量
auto var = expr;
基本上就像采用expr和剥离& – & -references的类型,并且从它的所有顶级常量和挥发性.这是否意味着以上行完全等同于以下内容?
std::remove_cv<std::remove_ref<decltype(expr)>::type>::type var = expr;
解决方法
不,这不是真的. auto var = expr;更像是通过expr通过值.
int x[1]; auto y = x;
这使得y为int *.
主要是自动x = expr;行为像模板类型扣除:
template <typename T> void f(T); int x[1]; f(x); // deduces T as int*
它更像是std :: decay< decltype(expr)> var = expr ;.