可以用 auto 关键字定义变量,编译器会自动判断变量的类型。例如:

auto i =100;  // i 是 int
auto p = new A();  // p 是 A*
auto k = 34343LL;  // k 是 long long

有时,变量的类型名特别长,使用 auto 就会很方便。例如:

map <string, int, greater <string> >mp;
for( auto i = mp.begin(); i != mp.end(); ++i)
cout << i -> first << ", " << i -> second;

编译器会自动判断出 i 的类型是 map<string, int, greater >::iterator。

decltype 关键字可以用于求表达式的类型。例如:

int i;
double t;
struct A { double x; };
const A* a = new A();
decltype(a) x1;  //x1 是 A*
decltype(i) x2;  //x2 是 int
decltype(a -> x) x3;  // x3 是 double

在上面的例子中,编译器自动将 decltype (a) 等价为A*,因为编译器知道 a 的类型是A*。

auto 和 decltype 可以一起使用。例如:

#include <iostream>
using namespace std;
struct A {int i;A(int ii) : i(ii) {}
};
A operator + (int n, const A & a)
{return A(a.i + n);
}
template <class T1, class T2>
auto add(T1 x, T2 y) -> decltype(x + y) {return x + y;
}
int main() {auto d = add(100, 1.5);  // d 是 double 类型,d = 101.5auto k = add(100, A(1));  // k 是 A 类型,因为表达式“100+A(1)”是A类型的cout << d << endl;cout << k.i << endl;return 0;
}

程序的输出结果如下:

101.5
101

第 12 行告诉编译器,add 的返回值类型是decltype(x+y),即返回值的类型和x+y这个表达式的类型一致。编译器将 add 实例化时,会自动推断出x+y的类型。

在 C++11 中,函数返回值若为 auto,则需要和 decltype 配合使用。在 C++14 中,则可以不用 decltype,例如下面的程序没有问题:

auto add (int a, int b)
{int i = a + b;return i;
}

C++ auto和decltype关键字相关推荐

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

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

  2. auto和decltype的区别

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

  3. decltype关键字详解

    学习目标: 掌握c++ decltype关键字 学习内容: decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. 既然已经有了 auto ...

  4. auto与decltype

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

  5. C++——auto、decltype、返回类型后置、模板别名:using =、nullptr

    1.3.声明 1.3.1.auto 以前版本关键字auto是一个存储类型说明符,表示动态存储还是静态存储,与static关键字对应,第九章也写了,C++11将其用实现自动类型推断(第三章).必须显示初 ...

  6. C++decltype关键字

    decltype decltype 关键字用于检查实体的声明类型或表达式的类型及值分类. 语法: decltype ( expression ) decltype 使用 // 尾置返回允许我们在参数列 ...

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

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

  8. C++11新特性之decltype关键字的使用

    一.decltype关键字介绍 decltype关键字与auto关键字相似,但又有不同之处:auto关键字是在编译时通过已经初始化的变量来确定auto所代表的类型.换句话说,auto修饰的表达式必须是 ...

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

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

最新文章

  1. Python学习笔记__6.1章 类和实例
  2. d3.js 封装一个方法更新柱状图,运用数据模板
  3. 认识httphandler
  4. mysql grou平by_MySQL group by对单字分组序和多字段分组的方法讲解
  5. Hadoop阅读笔记(四)——一幅图看透MapReduce机制
  6. 在 C# 中生成代码的四种方式——包括.NET 5中的Source Generators
  7. python拼图游戏_乐趣无穷的Python课堂
  8. MySQL笔记-MHA(Master High Availability)搭建
  9. 你了解分层架构吗?给被PetShop“毒害”的朋友(转)
  10. 免费直播课|Python数据可视化与科学计算可视化案例分享
  11. 干货 | 我如何考察面试者的机器学习水平
  12. 染用计算机语言,着色器语言
  13. IPtable 工作原理
  14. python生成exe文件
  15. win10更改了用户名后远程登录还要用原来的用户名怎么修改
  16. 保险精算--第13周作业
  17. C语言开发情人节玫瑰
  18. linux进程系列(5)进程链与进程扇
  19. 【题解】ccf csp 201812-1 小明上学
  20. 嵌入式到底是不是个大坑?6个对话让你重新认清真相!

热门文章

  1. 腾讯视频如何设置主设备
  2. Android如何回调编码后的音视频数据
  3. mysql insert 错误码_利用 MySQL 自身错误诊断区域-爱可生
  4. mysql,in中重复的记录也查出的方法
  5. android lua loadluafile 相对路径,Lua中的loadfile、dofile、require详解
  6. 湖南工大11级C语言网上作业,湖南工大11级C语言网上作业之《最简单的程序设计》.docx...
  7. mysql+跨服务器+写入_MySQL中使用FREDATED引擎实现跨数据库服务器、跨实例访问
  8. linux 64 32 编译支持,在64位linux上编译32位程序 for i386 intel
  9. 二级c语言基础题库100题,二级C语言上题库100题.doc
  10. 怎么查看服务器系统内存,怎么查看服务器系统内存