auto和decltype
- 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的更多相关文章
- auto与decltype
今天搜狗笔试的一道选择题,原题给忘了,但记得所考的知识点.知识点很基础,但很容易忽视. 具体内容可参考C++ Primer. auto :变量取auto后,其所对应的类型 auto一般会 ...
- 关于auto和decltype
auto会忽略顶层const,保留底层const ; const int* const p = &i; auto p2 = p; //p2是const int*,不是const int* co ...
- C++ 11 学习1:类型自动推导 auto和decltype
Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...
- c++11 auto 与 decltype 详解
转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题 ...
- 【C++】C++11的auto和decltype关键字
转自: http://www.linuxidc.com/Linux/2015-02/113568.htm 今天要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已 ...
- C++11新特性— auto 和 decltype 区别和联系
一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准 ...
- [转]引用模板类中定义的类型(用typedef或using)以及auto、decltype、typename的使用
一.背景 使用typedef或者using定义类型别名是非常常见的手段,在c++里面,有时为了封装性,模块性等原因还会在某一个namespace或者class内部定义类型别名. 最近在写c++代码的时 ...
- C++ 11 新特性: auto 和 decltype 区别和联系
一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就 ...
- C++11 auto and decltype
1.auto关键字 C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了. 这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型. 例如:aut ...
随机推荐
- Oracle数据库作业-4 查询
9. 查询"95031"班的学生人数.
- 数理方程:Fourier级数
更新:25 MAR 2016 对于周期函数(周期为\(2\pi\))或定义在\([-\pi,\pi]\)上的函数\(f(x)\),可以展开为* \(\large f(x)=\dfrac{a_0}{2} ...
- spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象
最近做了一个java的项目,部门领导给了一套代码让我尽快掌握,说心里话本人真心不喜欢java的这种项目方式,各种配置各种xml文件简直头都大了,下面就将我遇到的其中一个我认为是坑的地方整理出来,希望能 ...
- Log4net记录日志存库并存本地
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...
- 数据校验validator 与 DWZ
在做系统时经常会用到数据校验,数据校验可以自己写,也可以用现在成的,现在记录下两种类库使用方法, <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 ...
- 用宏定义封装LoadLibrary,方便的动态加载dll
同学们动态加载dll的时候是不是感觉挺麻烦的,每次都::LoadLibrary,::GetProcAddress,还要typedef一堆函数.最近闲来无聊,用宏封装了一下,可以少写不少代码,用来也挺方 ...
- 【学习笔记】【C语言】变量类型
根据变量的作用域,可以分为: 1.局部变量: 1> 定义:在函数(代码块)内部定义的变量(包括函数的形参) 2> 作用域:从定义变量的那一行开始,一直到代码块结束 3> 生命周期:从 ...
- DTCMS使用ajax局部刷新
动力启航的DTCMS代码遇到的问题: 前台post请求: $.ajax({ type: "POST", url: sendUrl, dataType: "json&quo ...
- asp.net 组织结构图控件
记得之前做项目的时候客户需要看一个组织结构图,从而了解一下公司的概况,本来自己之前没有做过这方面的控件,只好找度娘,出于对项目的完美,网上很多控件画面感比较渣,后来只能在这些个中挑个比较好的来做,先看 ...
- 【风马一族_Python】 决策树
<机器学习实战>第三章 决策树 ------------------------------------- #1 trees.py 计算给定数据集的香农熵 ---------------- ...