C++11之auto和decltype
- auto自动类型推断,用于从初始表达式中推断出变量的类型。
auto a;// 错误,没有初始化表达式,无法推断出a的类型autoint a =10;// 错误,auto临时变量的语义在C++ 11中已不存在auto a =10;auto c ='A';auto s("hello");vector<int> vctTemp;auto it = vctTemp.begin();auto ptr =[](){ cout <<"hello world"<< endl;};
- auto返回值占位,主要与decltype配合使用,用于返回值类型后置时的占位。
template<class T,class U>autoMultiply(T t, U u)->decltype(t*u){typedefdecltype(t*u)NewType;NewType*pResult =newNewType(t*u);return*pResult;}
- 若表达式e指向一个局部变量、命名空间作用域变量、静态成员变量或函数参数,那么返回类型即为该变量(或参数)的“声明类型”;
- 若e是一个左值(lvalue,即“可寻址值”),则decltype(e)将返回T&,其中T为e的类型;
- 若e是一个x值(xvalue),则返回值为T&&;
- 若e是一个纯右值(prvalue),则返回值为T。
1、表达式根据其值的类型可分为以下三类:
- lvalue:左值,即传统意义上的左值。
- xvalue(expiring value):x值(中间值?),指通过“右值引用”产生的对象。
这里x可以理解为即将消失(expiring),也可理解为中间(横跨左值和右值)。 - prvalue(pure rvalue):纯右值,即传统意义上的右值。
- glvalue(general lvalue):泛左值,由左值和x值构成。泛左值具有动态的类型和对象属性。
- rvalue:右值,由x值和纯右值构成。右值具有潜在的可移动性。
- 具名右值引用被视为左值。
- 无名右值引用被视为x值。
- 对函数的右值引用无论具名与否都将被视为左值。
decltype(fun()) sum = x;//sum的类型就是函数fun的返回值类型constint ci =0,&cj = ci;decltype(ci) x =0;//x的类型是const int型decltype(cj) y = x;//y的类型是const int&,y绑定到变量xdecltype(cj) z;//错误,引用类型必须被初始化int i =42,*p =&i,&r = i;decltype(r +0) b;//r+0的结果是int型//通过解引用可以给指针指向的对象赋值,说明解引用操作返回的是引用类型的decltype(*p) c;//错误,c是int&,必须被初始化//decltype结果类型与表达式形式密切相关decltype((i)) d;//错误,d是int&类型,必须初始化decltype(i) e;//正确,e是一个int类型
C++11之auto和decltype的更多相关文章
- 【C++】C++11的auto和decltype关键字
转自: http://www.linuxidc.com/Linux/2015-02/113568.htm 今天要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已 ...
- C++ 11 学习1:类型自动推导 auto和decltype
Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...
- c++11 auto 与 decltype 详解
转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题 ...
- 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 ...
- [转]引用模板类中定义的类型(用typedef或using)以及auto、decltype、typename的使用
一.背景 使用typedef或者using定义类型别名是非常常见的手段,在c++里面,有时为了封装性,模块性等原因还会在某一个namespace或者class内部定义类型别名. 最近在写c++代码的时 ...
- auto与decltype
今天搜狗笔试的一道选择题,原题给忘了,但记得所考的知识点.知识点很基础,但很容易忽视. 具体内容可参考C++ Primer. auto :变量取auto后,其所对应的类型 auto一般会 ...
- C++11 auto and decltype
1.auto关键字 C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了. 这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型. 例如:aut ...
随机推荐
- bug3 乱码问题
出现乱码问题是因为各软件之间的编码方式不同导致 1.tomcat修改编码方法: 2.myeclipse中修改编码方式的方法: window----preference ----general----- ...
- 特征降维之PCA
目录 PCA思想 问题形式化表述 PCA之协方差矩阵 协方差定义 矩阵-特征值 PCA运算步骤 PCA理论解释 最大方差理论 性质 参数k的选取 数据重建 主观理解 应用 代码示例 PCA思想 PCA ...
- 关于maven工程打jar的问题
今天对maven做一些整理,更好的理了下思路: 这个篇博客介绍的还是很详细的: http://www.cnblogs.com/haippy/archive/2012/07/04/2576453.htm ...
- bzoj 1193 贪心+bfs
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2015 Solved: 914[Submit][Statu ...
- Java入门:Java环境变量PATH、CLASSPATH、JAVA_HOME
一些初学者在用java HelloWorld指令运行程序的时候出现: Exception in thread "main" java.lang.NoClassDefFoundErr ...
- Ansible lineinfile模块详解
目录 简介 修改匹配行 在匹配行前或后添加内容 在匹配行前添加 在匹配行后添加 修改文件内容及权限 删除一行内容 文件存在则添加一行内容 如果有匹配的行则修改该行,如果不匹配则添加 参数backref ...
- windows环境下批处理实现守护进程
这个脚本提供两种方式守护,一种是通过进程名,但对于进程名都是java.exe的java程序不适用,另一种是通过netstat查找应用程序所监听的端口是否正在被监听.这两种方式可以在脚本中通过两个冒号注 ...
- jvm内存模型(运行时数据区)
运行时数据区(runtime data area) jvm定义了几个运行时数据区,这些运行时数据区存储的数据,供开发者的应用或者jvm本身使用.按线程共享与否可以分为线程间共享和线程间独立. 线程间独 ...
- seaborn基础整理
seaborn是基于matplotlib的更高级的做图工具,下面主要针对以下几个部分进行整理: 第一部分:https://douzujun.github.io/page/%E6%95%B0%E6%8D ...
- 用Grub4dos引导,硬盘安装ArchLinux
本来在工作机上用winXP,最近想深入Linux开发,于是决定装个Linux.家里的archLinux + awesome用得很好, 于是决定在工作机上也装一套. 不想刻盘,也不想用U盘,通过Grub ...