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

Ral*_*zky 10 c++ decltype auto c++11

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

auto var = expr;
Run Code Online (Sandbox Code Playgroud)

基本上就是从它的类型expr和剥离&/ && - 引用和所有顶级constness和volatile.这是否意味着上述行完全等同于以下内容?

std::remove_cv<std::remove_ref<decltype(expr)>::type>::type var = expr;
Run Code Online (Sandbox Code Playgroud)

R. *_*des 10

不,那不是真的.auto var = expr;更像是路过expr价值.

int x[1];
auto y = x;
Run Code Online (Sandbox Code Playgroud)

这样做yint*.

大多数情况下auto x = expr;表现为模板类型推导:

template <typename T>
void f(T);
int x[1];
f(x); // deduces T as int*
Run Code Online (Sandbox Code Playgroud)

它更像是std::decay<decltype(expr)> var = expr;.

  • 不完全是.这是C++:它有一个规则,即唯一没有例外的规则就是这个规则.`auto x = [] {};`生成lambda类型,但lambdas不能在`decltype`中使用. (7认同)