Auto 和 Decltye 的区别

/***auto 会去掉顶层const 和 &  而decltype 不会***/

//什么是顶层?
const int x=0, *ptr = x;
auto i = ptr; //i is int *
decltype(i) is const int *

int i = 42, *p = &i, &r = i;

decltype(i) x1 = 0;       //因为 i 为 int ,所以 x1 为int
auto x2 = i;              //因为 i 为 int ,所以 x2 为int

decltype(r) y1 = i;       //因为 r 为 int& ,所以 y1 为int&
auto y2 = r;              //因为 r 为 int& ,但auto会忽略引用,所以 y2 为int

decltype(r + 0) z1 = 0;   //因为 r + 0 为 int ,所以 z1 为int,
auto z2 = r + 0;          //因为 r + 0 为 int ,所以 z2 为int,

///对指针解引用之后decltype返回该类型指针的引用 , auto 只返回该类型
decltype(*p) h1 = i;      //这里 h1 是int&, 原因后面讲
auto h2 = *p;             // h2 为 int.

///另一个 decltype 返回与表达式形式相关 例如
int x=0;
decltype(x) is int
decltype( (x) ) is int&

decltype(auto) f1()
{
    int x=0;
    return (x);
}//返回值是int&

decltype(auto) f2()
{
    int x=0;
    return x;
}//返回值是int

///decltype 后面是表达式的时候 返回左值的引用
decltype(x = i) is int&//也就是说

原文地址:https://www.cnblogs.com/zhanghengyu/p/10885717.html

时间: 2024-10-18 09:55:44

Auto 和 Decltye 的区别的相关文章

auto和100%的区别

auto是随内容的高度而撑开的.100%是根据父级元素的高度来决定的.例如: <div style="height:100px;width:200px;"> <div style="height:auto;width:100px;float:left;">这个容器的高度是随里面的内容的高度而定</div> <div style="height:100%;width:100px;float:right;"&

C/C++ auto, static , register , extern 区别

先说几个概念: 1.从变量的生存期来分,可以分为 静态存储方式 和 动态存储方式 静态存储方式:程序运行期间由系统分配固定的存储空间的方式(全局变量) 动态存储方式:程序运行期间根据需要动态的分配存储空间的方式(1.函数形参,2自动变量,3函数调用时的现场保护盒返回地址) 2.数据存储类别包含四种:auto(自动), static (静态),register(寄存器), extern (外部) auto: 关键字auto可以省略,auto不写隐含确定为自动存储类别,属于动态存储方式 static

SQL基础之XML

1.XML数据类型 在SQL Server中xml数据类型可以用来保存xml文档,这个文档即可以是完整的xml文档和xml片段,这样开发者就可以像使用int数据类型一样来使用xml数据类型.不过xml数据类型是一种特殊的数据类型,它主要存在以下限制. (1)除了string数据类型外,没有其他数据类型能够转换为xml数据类型.xml数量列不可用于group by语句中. (2)xml列不得成为主键或外键的一部分,xml列不能指定为唯一的,可应用于xml列的内置标量函数只有isnull和coale

兼容IE6/IE7/IE8/FireFox的css hack

.color{ background-color: #CC00FF; background-color: #FF00009; *background-color: #0066FF; _background-color: #009933; } **记住上面得样式解释为顺序是 ff.ie8.ie7.ie6 ** 显示的结果: 用火狐浏览,颜色是紫色 用 IE8 浏览,颜色是红色 用 IE7 浏览,颜色是蓝色 用 IE6 浏览,颜色是绿色 IE8 最新css hack: "" 例:"

一个二级菜单引发的血案

近期发现自己css不是很好,于是又看了一遍<css权威指南>.总感觉自己抓不到重点.弃疗中...于是看看其他书.然后学妹跟我说她的二级菜单写得很乱.当时我心里就在想二级菜单,有何难?自认为10分钟能搞定.跟她要效果图并很自大的说了句“等会儿,我写个简单的”.于是血案由此引发... 二级菜单要实现的原效果图是: (如发现雷同,不是巧合,是我从别的网页上截屏下来的 ~_~).既然说了简单,肯定效果没这么精美.但是至少基本效果和原理要实现. 10分钟过去了....15分钟过去了....这个“等会儿”

Flexbox 布局的正确使用方法

Flexbox 布局的正确使用方法 在项目中,我们还会大量使用到flexbox的新旧属性,但大多数人一般只会写新属性,旧属性交由autoprefixer处理,但其实完成同样功能的新旧属性表现形式却不尽相同.还有部分人只使用"万能"的flex:number属性为伸缩项目分配空间,但有些特殊情景却无法满足,此文为此梳理了flexbox的新旧属性区别和分配空间的原理,为大家用flexbox布局的项目通通渠. Flexbox兼容性 PC端的兼容性 移动端的兼容性 如上图,为了兼容IE10-11

局部变量的存储类别--自动变量与静态局部变量

1.自动变量  auto 动态的分配存储空间,在函数调用结束后,就自动释放这些存储空间. 2.静态局部变量 static 即在函数调用结束后继续保留原值,占有的存储单元并不释放,在下一次调用该函数时,该变量已经有值. (若没有声明为static类别,则默认为auto类别) 具体区别,通过下面这段代码来理解: 1 #include<stdio.h> 2 3 int fun(int x) 4 { 5 int a=0; 6 static int b=3; 7 a++; 8 b++; 9 return

Lesson4(定位、超出隐藏)

1.外边框 outline:1px solid blue; 外边框用法和边框相似,外边框不占空间,只会显示 2.定位 position (1)相对定位 relative:对自身的一种定位 1>给父级设置相对定位之后,自己也跟随父级移动 2>给元素设置相对定位之后,不会影响其他元素的位置(即没有脱离文档流.还占有原来的空间) (2)绝对定位 absolute:相对于父级的定位 1>脱离文档流,不占原来的空间 2>定位在不设置top等方向值时,位置不会发生变化 3>定位的层级是要

Hibernate @Entity注解配置说明

持久化是位于JDBC之上的一个更高层抽象.持久层将对象映射到数据库,以便在查询.装载.更新或删除对象的时候,无须使用像JDBC那样繁琐的API.EJB的早期版本中,持久化是EJB平台的一部分.EJB3.0开始,持久化已经自成规范,被称为Java Persistence API. Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库.这些普通Java对象被称作Entity Bean.除了是用Java Persistence元数据将其