`auto`的ref-和cv-stripping属性。

时间:2013-06-24 10:17:23

标签: c++ c++11 auto decltype

我了解到以这种方式使用auto声明变量

auto var = expr;

基本上就像采用expr的类型和剥离& /&& -references以及它的所有顶级常量和不稳定性。这是否意味着上面的行完全等同于以下内容?

std::remove_cv<std::remove_ref<decltype(expr)>::type>::type var = expr;

1 个答案:

答案 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;

相关问题