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是最简单的选择,但是如果我 ...
随机推荐
- 项目里面的某个资源文件(比如plist、音频等)无法使用
检查:Build Phases -> Copy Bundle Resources
- 学习 opencv---(3) ROI 区域图像叠加&初级图像混合
在这篇文章里,我们一起学习了在OpenCV中如何定义感兴趣区域ROI,如何使用addWeighted函数进行图像混合操作,以及将ROI和addWeighted函数结合起来使用,对指定区域进行图像混合操 ...
- 【MySQL】常规操作
2016.4.10 1.MySQL查看系统当前默认自增列种子值和步长值(全局) 1 show GLOBAL VARIABLES like 'auto_incre%'; 2.MySQL查看具体某一张表的 ...
- 水平时间轴 html + css
比较粗糙,效果如图 这个是写微信页面时写的,pc 也是一样的效果 代码如下: <div class="time_line_box"> <div class=&qu ...
- 可以改变this指向的方法
this一般指向的是当前被调用者,但也可以通过其它方式来改变它的指向,下面将介绍三种方式: 1.call用作继承时: function Parent(age){ this.name=['mike',' ...
- xcode 常见错误报错问题!
1:module file '/Users/shaka/Library/Developer/Xcode/DerivedData/ModuleCache/92IKIZLYISUT/Darwin-2OA ...
- LeetCode之100. Same Tree
------------------------------------------ 递归比较即可 AC代码: /** * Definition for a binary tree node. * p ...
- WPF 实现 DataGrid/ListView 分页控件
在WPF中,通常会选用DataGrid/ListView进行数据展示,如果数据量不多,可以直接一个页面显示出来.如果数据量很大,2000条数据,一次性显示在一个页面中,不仅消耗资源,而且用户体验也很糟 ...
- I/O多路复用
为什么要使用I/O多路复用 假设要求你写一个echo-server服务器,它也能对用户从标准输入键入的交互命令做出响应.在这种情况下, 服务器必须响应两个互相独立的I/O事件: 1) 网络客户端发起的 ...
- PAT A 1115. Counting Nodes in a BST (30)【二叉排序树】
题目:二叉排序树,统计最后两层节点个数 思路:数组格式存储,insert建树,dfs遍历 #include<cstdio> #include<iostream> #includ ...