auto和decltype

来源:互联网 发布:智慧环保大数据平台 编辑:程序博客网 时间:2024/05/06 03:38

auto先计算出表达式,再根据表达式的结果来推断类型。
auto会忽略掉直接修饰变量的const,但会保留指针指向变量的const。

int i=0;const int ci=i, &cr = ci;auto b=ci;//intauto c=cr;//intauto d=&i;//int*auto e=&ci;//const int*const auto f=ci;//const intconst auto g=&ci;//const int * constauto &e=ci;

参数传递有两种,值传递和引用传递,指针传递也是值传递。指针可以看做一种稍微特殊的数据类型,是一种整形,存储的是内存地址。
所以,auto可以包含指针,但不能包含引用,不包含直接修饰变量的const。

decltype使用的表达式是一个变量,则decltype返回该变量的类型,包括直接修饰变量的const和引用。

const int ci=0, &cj=ci;decltype(ci) x=0;//x与ci的类型完全相同decltype(cj) y=x;//const int &

引用从来都是作为其所指对象的同义词出现,只有用在decltype处是一个例外。
如果decltype使用的表达式不是一个变量,则返回表达式结果对应的类型。
如果表达式的内容是解引用操作,则decltype将得到引用类型。

decltype((variable))的结果永远是引用,而decltype(variable)的结果只有当variable本身就是一个应用时才是引用。
因为变量加上括号,编译器会把它当成是一个表达式。
如果表达式可以作为左值,产生的就是引用。

0 0
原创粉丝点击