目录

1. auto的作用:

2. auto使用时的注意点

3. decltype 的作用

4. auto和decltype配合使用,实现追踪返回类型


1. auto的作用:

auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。从这个意义上讲,auto并非一种“类型”声明,而是一个类型声明时的“占位符”,编译器在编译时期会将auto替换为变量实际的类型。

2. auto使用时的注意点

<1>. 使用auto定义变量时,必须初始化

<2>. VS不支持在函数参数列表中使用auto,QT中支持

<3>.  auto变量不能作为自定义类型的成员变量

struct TEST
{int a;auto b; //错误,编译不过auto c = 10; //错误,哪怕初始化了也编译不过
};

<4>. auto不能用于数组

auto a[3] = {1, 2, 3}; //错误,哪怕初始化也编译不过

<5>. 模板实例化对象的类型不能是 auto类型

vector<int> a = {1, 2, 3}; //可以
vector<auto> b = {1, 2, 3}; //错误,哪怕初始化了也编译不过

3. decltype 的作用

decltype实际上有点像auto的反函数, auto可以让你声明一个变量,而decltype则可以从一个变量或表达式中得到其类型。根据decltype获得的类型,可以定义新的该类型变量

    int i;decltype(i) j = 0;cout << typeid(j).name() << endl;   // 打印出"i", g++表示integerfloat a;double b;decltype(a + b) c;cout << typeid(c).name() << endl;   // 打印出"d", g++表示doublevector<int> vec;typedef decltype(vec.begin()) vectype; // decltype(vec.begin()) 改名为 vectypevectype k;  //decltype(vec.begin()) k;  for (k = vec.begin(); k < vec.end(); k++){// 做一些事情}

可以使用 typeid(a).name()来显示变量a的型别;

4. auto和decltype配合使用,实现追踪返回类型

追踪返回类型用于函数模板中,根据函数运算结果推导函数返回值类型

在泛型编程中,函数中参数的型别不定,如果函数返回值型别是函数参数运算后得到,那会导致函数的返回值型别不定,无法在函数声明时指定函数返回值。所以,使用auto和decltype来实现追踪返回类型;在函数名和参数列表后面指定返回类型;

template <typename T1, typename T2>
auto func( T1& t1, T2& t2) -> decltype( t1*t2 )
{return t1*t2;
}

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函数的区别

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

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

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

  4. C++ auto和decltype关键字

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

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

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

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

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

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

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

  8. auto和decltype的用法总结

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

  9. auto和decltype的区别

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

最新文章

  1. grafana官方使用文档_使用 Loki 采集微服务日志
  2. VS中调试时不能关联源代码问题
  3. java chinapay_通过PHP/Java Bridge来实现ecshop的chinapay支付接口
  4. php7 myrypt,nginx + php 配置
  5. Android事件分发机制:基础篇:最全面、最易懂
  6. 3l如何使用_慢阻肺患者如何选购呼吸机和制氧机,需要注意哪些?
  7. 工作两个月的感受随笔
  8. 基于Keras的卷积神经网络(CNN)可视化
  9. AjaxControlToolkit工具控件之Accordion错误解决方法
  10. elementui如何在input 框中搜索_【挑战自学Python编程】第八天:while循环以及input()函数...
  11. IIS6配置后仍然无法解析json文件解决办法
  12. 美国数据不佳美元仍跳升,只因欧元区问题更多
  13. Linux Swap交换分区介绍
  14. 【序列推荐】KDD2018|STAMP---基于注意力的短期记忆优先的推荐
  15. html中如何调整图片的对比色,风光照片如何调出冷暖对比色?后期案例分享
  16. java+pom.xml+是什么_pom.xml文件是啥
  17. 开启微信公众号定位服务器,微信公众号定位学会这几步就够了!
  18. 雷神911air 装黑苹果
  19. Android基站定位详解
  20. join me - gregorian 歌词翻译

热门文章

  1. 海鸥表表带太长了怎么拆_海鸥表怎么拆表链
  2. maven 发部release版本
  3. keycloak SPI 开发讲解
  4. PPT中如何让文本两端对齐
  5. 什么是缓存穿刺和缓存雪崩?如何解决缓存穿透,缓存雪崩
  6. Java覆盖率工具jacoco,Cobertura
  7. git修改用户名和邮箱以及密码
  8. ps scavenge java_Java垃圾回收机制
  9. css动画效果transtion,transform,animation
  10. 说说 Redis 缓存穿透场景与相应的解决方法