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 ...
随机推荐
- eclipse 安装 activiti-designer-5.18.0,亲测成功
转: eclipse 安装 activiti-designer-5.18.0,亲测成功 2018年06月02日 15:50:05 ldw4033 阅读数:2826 版权声明:本文为博主原创文章,未 ...
- Centos7.2安装tomcat+Myeclipse(遇到的一些问题与总结)+web项目实战
工作环境:centos7.2 PS:没有耐心的同学可以直接跳到后面的安装方法,对于安装方法大多是网上的,我只是做相关收集和总结 给个tomca和Myeclipset折腾的半死,现在做一些总结1.一定要 ...
- servlet解析
什么是Servlet2,Servlet有什么作用3,Servlet的生命周期4,Servlet怎么处理一个请求5,Servlet与JSP有什么区别6,Servlet里的cookie技术7,Servle ...
- 题解【bzoj2733 [HNOI2012]永无乡】
Descriprition 两种操作 把两个集合并起来 求一个集合中的第 \(k\) 大(的编号) \(n \leq 10^5\) Solution 平衡树的板子题之一 维护两个点连不连通直接并查集 ...
- android中service启动后台程序
Service是Android中一个类,它是Android四大组件之一,使用Service可以在后台执行长时间的操作( perform long-running operations in the b ...
- node.js如何让前端请求时能跨域
1995年,Netscape提出了一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同. 当一个浏览器的两个tab页中分别打开来 百度和谷 ...
- BFS搜索:POJ No 3669 Meteor Shower
#include <iostream> #include <cstring> #include <queue> #include <cstdio> #i ...
- browser.versions.weixin
最近做很多HTML5的项目,很多页面会通过微信微博等SNS分享出去.在分享页面上提供公司APP的下载.但是在很多应用的浏览器中,点击下载链接无法下载应用.那么针对这些浏览器我们需要给用户提示从safa ...
- bzoj 2342 [Shoi2011]双倍回文(manacher,set)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题意] 求出形如w wR w wR的最长连续子串. [思路] 用manache ...
- UNIX环境高级编程 第3章 文件I/O
前面两章说明了UNIX系统体系和标准及其实现,本章具体讨论UNIX系统I/O实现,包括打开文件.读文件.写文件等. UNIX系统中的大多数文件I/O只需要用到5个函数:open.read.write. ...