• auto

1.编译器通过分析表达式的类型来确定变量的类型,所以auto定义的变量必须有初始值。

  1. auto i=; //ok,i为整型
  2.  
  3. auto j; //error,定义时必须初始化。
  4. j=;    

2.auto可以在一条语句中声明多个变量,但该语句中所有变量的初始值类型必须有一样。

  1. auto i=,*P=&i; //ok,i是整数,p是整型指针
  2. auto a=,b=3.14; //error,a和b类型不一致

3.auto会忽略掉顶层const,同时底层const则会保留下来

  1. const int a=,&b=a;
  2. auto c=a; //c是int 型,而不是const int,即忽略了顶层const
  3. auto d=&a; //d是一个指向const int 的指针,即保留了底层const

如果希望auto类型是一个顶层const ,需要明确指出:

  1. const auto e=a; //e是const int 类型

4.当使用数组作为auto变量的初始值时,推断得到的变量类型是指针,而非数组

  1. int a[]={,,,,,,,,,}
  2. auto b=a; //b是int *类型,指向数组的第一个元素
  3.  
  4. int c[][]={}
  5. auto d=c; //d是int(*d)[3]类型的数组指针
  6. for(auto e:c) //e是int*类型,而不是int(*)[3]
  7. for(auto &f:c) //f是int(&f)[3]
  8. //**************************************************
  9. decltype (a) c; //c是由10个整型数构成的数组,c[10]
  • decltype

decltype和auto功能类型,但略有区别:

1.decltype根据表达式类型确定变量类型,但不要求定义时进行初始化

  1. int a=;
  2. decltype (a) b; //b是int类型
  3. b=;
  4. int &c=a;
  5. decltype (c) d=a; //d为int &类型,因此定义时必须初始化

2.解引用指针操作将得到引用类型

  1. int a=,*b=a;
  2. decltype (*b) c=a; //解引用,c是int &类型,因此必须初始化

3.decltype所用的表达式加()得到的是该类型的引用

  1. int a=;
  2. decltype ((a)) b=a; //b是int&类型,而不是int类型,必须初始化
  3. decltype (a) c; //c是int类型

4.decltype所用变量时数组时,得到的同类型的数组,而不是指针

  1. int a[]={,}
  2. decltype (a) b={,} //int b[2]类型

5.decltype所用变量是函数时,得到的是函数类型,而不是函数指针

  1. int fun(int a);
  2. decltype(fun) *f(); //函数f返回的是 int(*)(int),即函数指针,而decltype(fun)是int(int)类型

auto和decltype的更多相关文章

  1. auto与decltype

    今天搜狗笔试的一道选择题,原题给忘了,但记得所考的知识点.知识点很基础,但很容易忽视. 具体内容可参考C++ Primer. auto :变量取auto后,其所对应的类型        auto一般会 ...

  2. 关于auto和decltype

    auto会忽略顶层const,保留底层const ; const int* const p = &i; auto p2 = p; //p2是const int*,不是const int* co ...

  3. C++ 11 学习1:类型自动推导 auto和decltype

    Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...

  4. c++11 auto 与 decltype 详解

    转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题 ...

  5. 【C++】C++11的auto和decltype关键字

    转自: http://www.linuxidc.com/Linux/2015-02/113568.htm 今天要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已 ...

  6. C++11新特性— auto 和 decltype 区别和联系

    一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准 ...

  7. [转]引用模板类中定义的类型(用typedef或using)以及auto、decltype、typename的使用

    一.背景 使用typedef或者using定义类型别名是非常常见的手段,在c++里面,有时为了封装性,模块性等原因还会在某一个namespace或者class内部定义类型别名. 最近在写c++代码的时 ...

  8. C++ 11 新特性: auto 和 decltype 区别和联系

    一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就 ...

  9. C++11 auto and decltype

    1.auto关键字 C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了. 这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型. 例如:aut ...

随机推荐

  1. ashx文件要使用Session

    ashx文件要使用Session,必须实现Session接口; using System;using System.Web;using System.Web.SessionState; //第一步:导 ...

  2. SliverLight(how to show data point on the column series)

    You should know that Silverlight comes with win form drawing software is different, it has no the la ...

  3. MVC 开启gzip压缩

    using System.IO; using System.IO.Compression; using System.Web; using System.Web.Mvc; public class C ...

  4. Ajax的ActionLink方法(适用于异步加载)

    8.2.1  AJAX的ActionLink方法 在Razor视图中,AJAX辅助方法可以通过Ajax属性访问.和HTML辅助方法类似,Ajax属性上的大部分AJAX辅助方法都是扩展方法(除了Ajax ...

  5. 19款绚丽实用的jQuery/CSS3侧边栏菜单

    jQuery作为一款主流的JavaScript前端开发框架,深受广告开发者的亲睐,同时jQuery有着不计其数的插件,特别是菜单插件更为丰富,本文将要为大家介绍20个绚丽而实用的jQuery侧边栏菜单 ...

  6. 使用 CocoStudio UI 编辑器实现《乱斗堂》设置界面

    由于是引用别人的,所以直接贴上地址了.http://www.cocoachina.com/bbs/read.php?tid=164820&fpage=7 1 游戏中必不可少的 UI 元素    ...

  7. Linux常用命令--文件的压缩和解压缩

    在Linux系统中,我们通常使用的文件压缩命令有:bunzip2 , bzip2 , cpio , gunzip , gzip ,split(切割文件) , zgrep(在压缩文件中寻找匹配的正则表达 ...

  8. 我们为什么要使用 href="javascript:void(0)"

    做过web前端UI的小伙伴们都知道,有时候我们在网页中会使用一些超级链接,而这些链接不用指向任何地址,只是为了配合javascript的onclick事件而存在的,当我们点击这些链接时(其实也可以看做 ...

  9. Berkeley DB

    最近用BDB写点东西,写了挺多个测试工程.列下表,也理清楚最近的思路 1.测试BDB程序,包括打开增加记录,查询记录,获取所有记录.将数据转存mysql 程序的不足,增加记录仅仅只有key和value ...

  10. 如何开启MYSQL远程连接权限

    开启MYSQL远程连接权限 //建议设置固定IP mysql> GRANT ALL PRIVILEGES ON *.* TO root@"8.8.8.8" IDENTIFIE ...