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 ...
随机推荐
- MySQL使用笔记(八)统计函数和分组数据记录查询
By francis_hao Dec 17,2016 统计函数数据记录查询 统计函数 统计函数 描述 count() count(*):统计表中记录条数(包括NULL值字段) count(fie ...
- C++并发类成员函数调用(练习1)
一般类成员函数开线程格式 std::thread t1(&类名::函数,&实例化对象,参数....) ||std::thread t1(std::bind(&&类名:: ...
- 【Asp.net入门03】第一个ASP.NET 应用程序-创建ASP.NET项目
本部分主要内容: 创建并运行Asp.net项目 web窗体 数据模型 调用代码隐藏方法 数据验证 1.操作步骤 第一步:启动Visual Studio 2013,然后从File(文件)菜单中选择New ...
- 编程语言教程书该怎么写: 向K&R学习!
原文地址:Lax Language TutorialsAndrew Binstock 每年在评审Jolt Awards图书的时候,我都会被一些语言教程类图书弄得心力交瘁.从这些年的评审经验来看,这些语 ...
- tomcat启动时,内存溢出,Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
问题原因 通过tomcat启动项目,也许是因为项目太大,配置的内存不够用了.老是报内存溢出的问题. 解决办法 1.选中项目 右键 run as ->Run Configurations... ...
- NGINX配置PHP解析
<?php phpinfo(); ?> location ~ \.php$ { root html; fastcgi_pass ; fastcgi_index index.php; fas ...
- ZeroMQ API(六) 代理
1.zmq_proxy(3) 1.1 名称 zmq_proxy - 开始内置ZMQ代理 1.2 概要 int zmq_proxy(const void * frontend,const void * ...
- 说明你javascript写的很烂的5个问题
Javascript在互联网上名声很臭,但你又很难再找到一个像它这样如此动态.如此被广泛使用.如此根植于我们的生活中的另外一种语言.它的低学习门槛让很多人都称它为学前脚本语言,它另外一个让人嘲笑的东西 ...
- HDU 4311 Meeting point-1 求一个点到其它点的曼哈顿距离之和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4311 解题报告:在一个平面上有 n 个点,求一个点到其它的 n 个点的距离之和最小是多少. 首先不得不 ...
- 在window 8 或windows2012 上用命令行安装framework3.5 方法
找到对应操作系统安装目录的sources文件夹下的sxs文件夹,拷贝到本地电脑,如F:盘 根目录下 CMD(管理员身份)命令: dism.exe /online /enable-feature /fe ...