• auto

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

auto i=;                      //ok,i为整型

auto j;                        //error,定义时必须初始化。
j=;    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int fun(int a);
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. codeforces 677C C. Vanya and Label(组合数学+快速幂)

    题目链接: C. Vanya and Label time limit per test 1 second memory limit per test 256 megabytes input stan ...

  2. CF 118E Bertown roads 桥

    118E Bertown roads 题目:把无向图指定边的方向,使得原图变成有向图,问能否任意两点之间互达 分析:显然如果没有桥的话,存在满足题意的方案.输出答案时任意从一个点出发遍历一遍即可. 求 ...

  3. could not read data from '/Users/xxxx/myapp-Info.plist'

    xcode编译报错如下: could not read data from '/Users/iamme/Documents/XCode/myapp/myapp/myapp-Info.plist': T ...

  4. Debian下配置SSH服务器的方法

    Debian 503版本中实现的,Debian默认好像是没有ssh支持的. SSH的安装apt-get install openssh-serverapt-get install sshSSH的配置O ...

  5. OSPF系列

    实验一.点对点链路上的OSPF 拓扑图 1. 首先配置好路由器R1接口地址和回环地址 2. 配置路由器R2的接口地址和回环地址 3. 配置路由器R3的接口地址和环回地址 4. 配置R1的OSPF协议 ...

  6. OSPF路由汇总和默认路由设置

    目标 掌握OSPF路由汇总的配置 掌握OSPF默认路由的配置 一.——区域间汇总 配置IP,R2四个环回口 R1(config)#inter s1/0 R1(config-if)#ip add 200 ...

  7. Newtonsoft.Json 基本用法

    Newtonsoft.Json 是.net 开源的一个json格式处理类库 官方网站:http://json.codeplex.com/ 在使用的项目引用Newtonsoft.Json库.平常使用的方 ...

  8. Cocos移植到Android的一些问题-SQLite3数据库移植问题

    首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一 ...

  9. Swift字符串类型

    字符串初始化 1.初始化 let  someString        =   "Some      string    literalvalue" let wiseWords = ...

  10. ajax 返回数据 无法得到其属性的解决办法

    当我们用ajax无法 得到其属性.正常情况下是: <script type="text/javascript">        function useAjax(sen ...