• auto自动类型推断,用于从初始表达式中推断出变量的类型。
  1. auto a;// 错误,没有初始化表达式,无法推断出a的类型
  2. autoint a =10;// 错误,auto临时变量的语义在C++ 11中已不存在
  3. auto a =10;
  4. auto c ='A';
  5. auto s("hello");
  6. vector<int> vctTemp;
  7. auto it = vctTemp.begin();
  8. auto ptr =[](){ cout <<"hello world"<< endl;};

  • auto返回值占位,主要与decltype配合使用,用于返回值类型后置时的占位。
  1. template<class T,class U>
  2. autoMultiply(T t, U u)->decltype(t*u)
  3. {
  4. typedefdecltype(t*u)NewType;
  5. NewType*pResult =newNewType(t*u);
  6. return*pResult;
  7. }
decltype相关用法说明
类似于sizeof操作符,decltype也不需对其操作数求值(而auto会执行表达式)。粗略来说,decltype(e)返回类型前,进行了如下推导:
  1. 若表达式e指向一个局部变量、命名空间作用域变量、静态成员变量或函数参数,那么返回类型即为该变量(或参数)的“声明类型”;
  2. 若e是一个左值(lvalue,即“可寻址值”),则decltype(e)将返回T&,其中T为e的类型;
  3. 若e是一个x值(xvalue),则返回值为T&&;
  4. 若e是一个纯右值(prvalue),则返回值为T。

1、表达式根据其值的类型可分为以下三类:

  • lvalue:左值,即传统意义上的左值。
  • xvalue(expiring value):x值(中间值?),指通过“右值引用”产生的对象。
                                     这里x可以理解为即将消失(expiring),也可理解为中间(横跨左值和右值)。
  • prvalue(pure rvalue):纯右值,即传统意义上的右值。
2、两种复合类型:
  • glvalue(general lvalue):泛左值,由左值和x值构成。泛左值具有动态的类型和对象属性。
  • rvalue:右值,由x值和纯右值构成。右值具有潜在的可移动性。
3、关于右值引用:
  • 具名右值引用被视为左值。
  • 无名右值引用被视为x值。
  • 对函数的右值引用无论具名与否都将被视为左值。
  1. decltype(fun()) sum = x;//sum的类型就是函数fun的返回值类型
  2. constint ci =0,&cj = ci;
  3. decltype(ci) x =0;//x的类型是const int型
  4. decltype(cj) y = x;//y的类型是const int&,y绑定到变量x
  5. decltype(cj) z;//错误,引用类型必须被初始化
  6. int i =42,*p =&i,&r = i;
  7. decltype(r +0) b;//r+0的结果是int型
  8. //通过解引用可以给指针指向的对象赋值,说明解引用操作返回的是引用类型的
  9. decltype(*p) c;//错误,c是int&,必须被初始化
  10. //decltype结果类型与表达式形式密切相关
  11. decltype((i)) d;//错误,d是int&类型,必须初始化
  12. decltype(i) e;//正确,e是一个int类型
 

C++11之auto和decltype的更多相关文章

  1. 【C++】C++11的auto和decltype关键字

    转自: http://www.linuxidc.com/Linux/2015-02/113568.htm 今天要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已 ...

  2. C++ 11 学习1:类型自动推导 auto和decltype

    Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习. 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译 ...

  3. c++11 auto 与 decltype 详解

    转自: here 一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题 ...

  4. C++11新特性— auto 和 decltype 区别和联系

    一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准 ...

  5. C++ 11 新特性: auto 和 decltype 区别和联系

    一. auto简介编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准就 ...

  6. 关于auto和decltype

    auto会忽略顶层const,保留底层const ; const int* const p = &i; auto p2 = p; //p2是const int*,不是const int* co ...

  7. [转]引用模板类中定义的类型(用typedef或using)以及auto、decltype、typename的使用

    一.背景 使用typedef或者using定义类型别名是非常常见的手段,在c++里面,有时为了封装性,模块性等原因还会在某一个namespace或者class内部定义类型别名. 最近在写c++代码的时 ...

  8. auto与decltype

    今天搜狗笔试的一道选择题,原题给忘了,但记得所考的知识点.知识点很基础,但很容易忽视. 具体内容可参考C++ Primer. auto :变量取auto后,其所对应的类型        auto一般会 ...

  9. C++11 auto and decltype

    1.auto关键字 C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了. 这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型. 例如:aut ...

随机推荐

  1. bootstrap.yml与application.yml的区别

    说明:其实yml和properties文件是一样的原理,主要是说明application和bootstrap的加载顺序.且一个项目上要么yml或者properties,二选一的存在. Bootstra ...

  2. 【Asp.net入门03】第一个ASP.NET 应用程序-创建ASP.NET项目

    本部分主要内容: 创建并运行Asp.net项目 web窗体 数据模型 调用代码隐藏方法 数据验证 1.操作步骤 第一步:启动Visual Studio 2013,然后从File(文件)菜单中选择New ...

  3. ROI POOLING 介绍

    转自 https://blog.csdn.net/gbyy42299/article/details/80352418 Faster rcnn的整体构架: 训练的大致过程: 1.图片先缩放到MxN的尺 ...

  4. 科学计算三维可视化---TraitsUI与Mayavi实例

    TraitsUI与Mayavi实例 一:创建一个简单的TraitsUI与Mayavi实例 from numpy import sqrt,sin,mgrid from traits.api import ...

  5. python---await/async关键字

    推文:玩转 Python 3.5 的 await/async 首先看正常的两个函数之间的执行 def func1(): print("func1 start") print(&qu ...

  6. vue 打印页面部分区域

    1. vue项目打印页面部分区域 2. 原生js实现页面局部打印功能 3. vue项目中将table组件导出Excel表格以及打印页面内容

  7. HDU 2814 斐波那契循环节 欧拉降幂

    一看就是欧拉降幂,问题是怎么求$fib(a^b)$,C给的那么小显然还是要找循环节.数据范围出的很那啥..unsigned long long注意用防爆的乘法 /** @Date : 2017-09- ...

  8. Postman简明教程

    一.Postman简介 Postman是一款接口测试工具,常用于日常工作的接口类功能测试和简单的自动化测试. 二.Postman功能介绍 1.常见get请求的接口测试 我们现在有这样一个获取学生信息的 ...

  9. 双击CAD对象,显示自定义对话框实现方法

    class TlsApplication : IExtensionApplication { void IExtensionApplication.Initialize() { TTest.Start ...

  10. 【C++】数组-二分法查找

    1.原理 对于给定值的查找,如果大于该数组的中间元素,下一步在元素值大的区域继续与其中间元素比较:否则下一步在元素值小的区域内继续查找,直到找到目标元素.如果到最后还没有找到,则输出"数组中 ...