C++ auto和decltype关键字

C++11新标准引入了auto和declty这两个类型推断关键字,auto的推断是基本上针对赋值类型,而decltype则常常希望重表达式中推断出要定义变量的类型,但是不想用该表达式的值初始化变量。

auto num = 21;//num为int类型,初始值为21
decltype (num) tmp;//tmp为int类型

1. auto

auto可以在一个语句中声明多个变量,但是其基本类型只能有一个

auto i = 0, j = 3.14; //错误,j的推断为double,而i是int
auto i = 0, *j = &i;  //正确

2. 区别

  1. auto类型推断的时候会忽略顶层const,保留底层const,而decltype都会保留, 顶层const和底层const一般针对的是指针和引用,顶层const表示指针本身是一个const,底层const表示指针对象所指的是一个常量,用于申明引用的const为底层const。对于一般的基本类型,C++primer把它看作顶层const。
const int i = 0, &ri = i;
auto j = i;   //j是一个整数,顶层const被忽略
auto k = ri;  //k是一个整数,ri是i的别名,i本身是一个顶层const
auto m = &i;  //m是一个整形指针
auto n = &ri; //n是一个指向整数常量的指针,对常量对象取地址是一种底层const
const int i = 0, &ri = i;
decltype (i) j = 0; //j的类型为const int
decltype (ri) k = j; //k的类型为const int &
decltype (ri) m; //错误,引用必须初始化
  1. decltype (())的结果永远是引用
int i = 0;
decltype ((i)) j = 21; //j的类型为int &
  1. decltype推断的时候,针对引用类型,推断的类型必须比初始化的类型更严格
int temp = 7;
const int i = 0, &ri = i;
decltype ((ri)) M = temp;//正确, M为cosnt int &, temp为int
decltype ((temp)) N = i; //错误, N为int &, i为const int
decltype (i) Z = ri; //正确,Z为const int, ri为i的引用为const int
decltype ((i)) Z = ri; //正确,Z为const int, ri为i的引用为const int

auto和decltype的区别相关推荐

  1. stdmove 跟 左键引用 区别_C++ auto和decltype的区别

    通过<C++ auto>和<C++ decltype>两节的学习,相信大家已经掌握了 auto 和 decltype 的语法规则以及使用场景,这节我们将 auto 和 decl ...

  2. 《C++ Primer 第五版》第二章(第5小节)——using和typedef,auto和decltype总结

    1.using和typedef(作用:定义类型别名) 1)typedef和using都可以用来定义一个类型别名,二者在类型别名上定义没有区别.只是需要注意的是类型和类型别名的顺序,使用typedef定 ...

  3. 浅谈auto与decltype函数的区别

    auto与decltype都是C++里处理类型的指示符,它们的使用场景如下: auto decltype 在我们需要给变量赋值的时候,简单的程序往往可以通过观察得出表达式的类型,但在一些大型程序中这样 ...

  4. auto与decltype

    1.C++11 使用 auto 关键字来支持自动类型推导 auto 类型推导的语法和规则 auto 关键字基本的使用语法如下: auto name = value; name 是变量的名字,value ...

  5. C++11 auto和decltype关键字

    auto 可以用 auto 关键字定义变量,编译器会自动判断变量的类型.例如: auto i =100; // i 是 int auto p = new A(); // p 是 A* auto k = ...

  6. C++ auto和decltype关键字

    可以用 auto 关键字定义变量,编译器会自动判断变量的类型.例如: auto i =100; // i 是 int auto p = new A(); // p 是 A* auto k = 3434 ...

  7. C++新特性探究(6.1):auto和decltype的类型推断差异所在

    例 附上例代码: #include <iostream> using namespace std;int Max(int a,int b) {return a>b?a:b; }cla ...

  8. C++11新特性——auto和decltype

    一.auto和decltype 1.auto和decltype都是C++11新增的关键字,都用于类型自动推导. 类型格式 auto varname = value; //auto的语法格式 declt ...

  9. auto和decltype的用法总结

    auto和decltype的用法总结 本博客转载自:https://www.cnblogs.com/XiangfeiAi/p/4451904.html 1 auto 1.1 auto的作用 一般来说, ...

最新文章

  1. 【C++语法】回车与换行(vs2008)
  2. 正则表达式 学习笔记5.3
  3. OneAPM大讲堂 | 提高JavaScript性能的30个技巧
  4. C语言 | C语言实现日历打印
  5. [BZOJ3874/AHOI2014]宅男计划
  6. 1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg
  7. 每天一道LeetCode-----分糖果问题
  8. Memcached简介
  9. P4774-[NOI2018]屠龙勇士【EXCRT】
  10. gridreport5.6如何设置打印3次_转载一篇文章 奔图打印机常见问题以及解决方法
  11. 区块链技术:颠覆性革命浪潮的开始
  12. 最大似然估计与最小二乘
  13. java版本的RtpStream
  14. ALOS_PALSAR_12.5m分辨率DEM数据下载
  15. 简谈触摸板程序的实现(一)
  16. Serializer对象
  17. NOI(OJ)编程基础篇
  18. Java导出Word文档的实现
  19. php 交换机 密码,S5100系列交换机使用正确的用户名和密码进行SSH登录时提示错误的解决方法...
  20. This is a CONNECT tunnel, through which encrypted HTTPS traffic flows.

热门文章

  1. (开源kkFileView、kkOffice)在线预览word、pdf、ofd、excel、ppt、压缩包、图片等等
  2. 动态内存管理 - malloc、calloc、realloc、柔性数组
  3. dockerfile优化小技巧
  4. 域名更改解析IP后,部分电脑还是访问的原来IP
  5. ARM单片机的嵌入式工控机主板功能应用
  6. 学计算机科学与技术后悔了怎么办,刚刚报了陕西师范大学(计算机科学与技术)的免师,现在很后悔,该怎么办?...
  7. 转:关注全国爱牙日 九成人刷牙方法不正确
  8. Unity3D开发之扇形图
  9. 【CSDN编程竞赛】参赛经历分享及AK代码分享
  10. 计算机文件夹快捷键加密视频,如何给文件夹设置密码 电脑