C++11 auto and decltype
1、auto关键字
C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了。
这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型。
例如:auto i = 0 ;编译器会通过“0”值,推导出变量i是整型。
如果初始值是引用,如:
- int i = 4;
- int &ri = i;
- auto ai = ri;
通过应用是利用了ri指向的对象,所以ai的类型是int。也就是ai与i的类型是相同的。
另外,auto是忽略top-level const,而保留low-level const属性。具体说明如下:
- const int ci = i, &cr = ci;
- auto b = ci; // b is an int (top-level const in ci is dropped)
- auto c = cr; // c is an int (cr is an alias for ci whose const is top-level)
- auto d = &i; // d is an int * (& of an int object is int *)
- auto e = &ci; // e is const int * (& of a const object is low-level const)
上面的变量b、c、d、e说明了auto的一个特别属性,该特性与下面将要介绍的另一个关键字decltype不同。
为了实现top-level const,需要在auto前面加const,也就是const auto f = ci,那么f就是const int 类型。
2、decltype
关键字decltype能够推导表达式或者函数的返回类型,但不对表达式求值。
例如:
- decltype(f()) sum = x;
变量sum拥有f()的返回值类型。与auto不同,decltype能够返回变量的top-level属性,如果变量是引用,那么decltype修饰的变量也是引用。例如:
- const int ci = 0, &cj = ci;
- decltype(ci) x = 0; // x has type const int
- decltype(cj) y = x; // y has type const int & and is bound to x
- decltype(cj) z; // error: z is a reference and must be initialized.
当表达式不是变量,而是可作为左值的对象时,那么decltype返回的时指向该对象类型的应用。
- int *p = &i;
- decltype(*p) pri = i;
- decltype(p) pi = &i;
其中pri是int &类型,而pi是int *类型。
decltype的推导结果还与给定的表达式的形式有关。如果对变量求类型,那么decltype直接返回变量的类型;如果变量加括号后,那么decltype返回的类型是引用,引用的类型就是该变量的类型。
- decltype(i) e; // e is an int variable uninitialized
- decltype((i)) d; // error: d is int & and must be initialized
C++11 auto and decltype的更多相关文章
- c++11 auto 与 decltype 详解
转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题 ...
- C++11 auto和decltype推导规则
VS2015下测试: decltype: class Foo {}; int &func_int_r(void) { int i = 0; return i; }; int && ...
- C++ 11 学习1:类型自动推导 auto和decltype
Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...
- c++11——auto,decltype类型推导
c++11中引入了auto和decltype关键字实现类型推导,通过这两个关键字不仅能够方便的获取复杂的类型,而且还能简化书写,提高编码效率. auto和decltype的类型推导都是编译器在 ...
- 【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新标准 ...
- C++ 11 新特性: auto 和 decltype 区别和联系
一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就 ...
- 关于auto和decltype
auto会忽略顶层const,保留底层const ; const int* const p = &i; auto p2 = p; //p2是const int*,不是const int* co ...
- C++11新特性--decltype (转)
返回值 decltype(表达式) [返回值的类型是表达式参数的类型] 这个可也用来决定表达式的类型,就像Bjarne暗示的一样,如果我们需要去初始化某种类型的变量,auto是最简单的选择,但是如果我 ...
随机推荐
- jQuery入门(1)jQuery中万能的选择器
jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...
- PHP导出数据到CSV文件函数 csv_export()
后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...
- 我爱模仿app之格瓦拉客户端
最近有很多人问我,这个效果该怎么实现,那个功能该怎么实现.所以我准备开个专题,找一些app模仿,写一些示例代码,以供大家参考. 第一个下手的就是格瓦拉,没用过的可以下载看看,效果做的还是可以的,专场, ...
- Jenkins的使用
参考: http://www.cnblogs.com/sunzhenchao/archive/2013/01/30/2883289.html
- word20161210
gateway / 网关 gateway account / 网关帐户 Gateway Service for NetWare / NetWare 网关服务 GDI objects / GDI 对象 ...
- java.lang.UnsatisfiedLinkError: Couldn't load BaiduMapSDK 的解决方法
遇到找不到so的同学们可以先从以下几个方面来检查问题: 1.so的名字是不是被修改了?我们SDK的so名字是固定的,如果您自行对它进行了重命名操作,那肯定是没法找到so的.2.so放置位置不对.so需 ...
- Python自动化之django视图
视图 1.获取用户请求数据 request.GET request.POST request.FILES PS: GET:获取数据 POST:提交数据 request其他方法详解:http://dja ...
- 单词words
论一类脑筋急转弯题和奇技淫巧题的解题技巧 [题意] 给定n个长为m且只包含xyz的字符串,定义两个字符串的相似程度为它们对应位置相同字符个数(比如xyz和yyz的相似程度为2,后两位相同),分别求出相 ...
- css实现翻页效果
如图,鼠标移动到图上,实现右上角翻页的效果,本例主要border边框的设置. 一.基本概念 <html> <head> <style> #demo{ width:0 ...
- MySQL Binlog Mixed模式记录成Row格式
背景: 一个简单的主从结构,主的binlog format是Mixed模式,在执行一条简单的导入语句时,通过mysqlbinlog导出发现记录的Binlog全部变成了Row的格式(明明设置的是Mixe ...