当前位置: 首页 > news >正文

【C++】auto和decltype类型推导关键字

1.C++11关键字

auto和decltype是C++11引入的关键字,负责类型的推导。所有不同的是:
auto可直接用来定义变量,编译器会自动推导出变量的类型。decltype是推导出一个操作数的类型,然后用这个类型再去定义。

2.两者区别

尽管两者都是宏观意义上的类型推导,但是还是有细微差别的。关键字auto在类型推导过程中会发生一些退化,比如在:

  • 顶层const会被忽略
  • 引用(左值右值都一样)
  • 数组 -> 首地址
  • 函数 -> 函数指针
void func() {}
int main() 
{const int a = 10;auto auto_a = a;// 顶层const可以忽略,推导后为intint &&b = 10;auto auto_b = b;// 引用可以忽略,推导后为intint arr[3] = { 1,2,3 };auto auto_arr = arr;// 退化为首地址,推导为int*auto auto_func = func;// 推导为函数指针void (*func)()
}

而对于上述场景, decltype会保留原始类型,不会退化。

3.使用场景

1.auto关键字经常用在两个地方(我自己理解常用的)

  • 在类似lambda表达式或者接收复杂函数的复杂返回值的时候,直接用auto去承接返回值
auto res = [](int x) {return x * 2; };
  • 在STL中迭代器、模板类型,直接用auto去简化
std::map<int, std::string> myMap;
for (auto it = myMap.begin(); it!= myMap.end(); ++it) {// ...
}

2.decltype关键字相当于是更严谨的auto,它可以保证推导出来的类型不退化,特别是当需要保留const和引用场景的时候。
举一个模板编程的例子:

template<typename T, typename U>
auto add(T t, U u) -> decltype(t + u) {return t + u;
}

4.为什么对于函数类型推导要加上:-> decltype()

总结一句话:更加灵活、准确地推导出类型。

auto 函数名() -> decltype()

已经形成一种固定搭配了!

http://www.lryc.cn/news/494659.html

相关文章:

  • OGRE 3D----3. OGRE绘制自定义模型
  • ARM + Linux 开发指南
  • facebook欧洲户开户条件有哪些又有何优势?
  • 算法训练(leetcode)二刷第三十一天 | 1049. 最后一块石头的重量 II、494. 目标和、*474. 一和零
  • 软件测试丨Pytest生命周期与数据驱动
  • Figma入门-原型交互
  • 网络安全防范技术
  • Java - JSR223规范解读_在JVM上实现多语言支持
  • win10系统部署RAGFLOW+Ollama教程
  • 基于Python制作一个简易UI界面
  • 鲁菜大师程伟华到访金宫川派味业
  • Linux设置jar包开机自启动
  • IoTDB 常见问题 QA 第一期
  • 【linux学习指南】linux捕捉信号
  • git如何快速拉取已经提交的mr进行验证
  • 【阿来来gis规划师工具箱说明书】h07四分标注
  • 【大数据学习 | 面经】HDFS的三副本机制和编码机制
  • lua-cjson 例子
  • java面向对象知识点: 封装,构造,重载
  • go的math/rand随机数生成器
  • JiaJia-CP-1,2,3的WP(2)
  • 3DMAX星空图像生成器插件使用方法详解
  • ROS2 系列学习教程(总目录)
  • [GKCTF 2021]签到
  • Kubernetes——part11 云原生中间件上云部署 Rocketmqkafkazookeeper
  • ip租期到了
  • 鸿蒙系统(harmony)支持Android应用的双框架技术架构分析
  • 面积等效原理
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(四):JMeter中BeanShell内置方法使用
  • 大小写转换