概述

类型推导主要是依赖auto关键字和decltype关键字/运算符实现的,具体用法参考下面的例子。

二者特点:

  • auto 用于声明时推导遍历
  • decltype 用于推导各种表达式, decltype(var)中var也是一种称为变量表达式的表达式
  • 二者都是在编译时进行推导。
  • 引用类型推断:decltype推断变量类型时会保留引用性质,而auto会忽略引用性质,将其推断非引用类型

使用场合:

  • decltype适用于需要根据表达式类型声明变量的场合,特别是在模板元编程和泛型编程中,可以用于推断函数返回类型、模板参数类型等。
  • auto适用于需要根据初始化值推断变量类型的场合,可以简化代码,减少类型冗余,提高代码的可读性和可维护性。它特别适用于迭代器、范围循环、lambda表达式等情况下。

用法举例

参考测试项目的modrenc_auto_decltype.cpp文件

主要内容:

  • auto 推导变量和返回值时的使用场景
  • decltype 推导各种表达式的使用场景
  • decltype 用于完美转发
#include "ModernCppTestHeader.h"

namespace n_auto {

	template <class T, class U>
auto add(T t, U u) { return t + u; } // C++ 支持值模板
template <auto n>
auto f() -> std::pair<decltype(n), decltype(n)>
{
return { n, n };
} // 完美转发 decltype(auto)
template <class F, class... Args>
decltype(auto) pref_forward(F f, Args&&... args)
{
return f(std::forward<Args>(args)...);
}
} void auto_decltype_test()
{
LOG_FUNC(); LOG_TAG("auto&decltype 推导变量");
auto a0 = 1 + 2;
auto a1 = a0;
decltype(auto) a2 = a0;
decltype(auto) a3 = (a0);
auto a4 = { 1, 2 };
auto a5 {10}; //使用{}构造器
auto [a6, a7] = n_auto::f<0>(); //结构化绑定
auto a8 = n_auto::add(1, 1.2); LOG_VAR_TYPE(a0);
LOG_VAR_TYPE(a1);
LOG_VAR_TYPE(a2);
LOG_VAR_TYPE(a3);
LOG_VAR_TYPE(a4);
LOG_VAR_TYPE(a5);
LOG_VAR(a6);
LOG_VAR_TYPE(a6);
LOG_VAR(a7);
LOG_VAR_TYPE(a7);
LOG_VAR_TYPE(a8); LOG_TAG("auto 用于指代lambda");
auto b0 = [](int x) {LOG_VAR(x); };
b0(10); LOG_TAG("decltype(auto) 用于完美转发");
auto c0 = [](int x1, int x2) {return x1 + x2; };
auto c1 = n_auto::pref_forward(c0, 1, 5);
LOG_VAR(c1); }

现代C++(Modern C++)基本用法实践:一、类型推导的更多相关文章

  1. Linux中sed的用法实践

    Linux中sed的用法实践 参考资料:https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html http://www.fn139 ...

  2. Effective Modern C++:01类型推导

    C++的官方钦定版本,都是以ISO标准被接受的年份命名,分别是C++98,C++03,C++11,C++14,C++17,C++20等.C++11及其后续版本统称为Modern C++. C++11之 ...

  3. Linux find命令的用法实践

    一.find命令简介 Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大 ...

  4. PHP命令空间namespace及use的用法实践总结

    以下皆为本人自我理解内容,如有失误之处,请多多包涵. 文章大纲: 使用namespace的目的 namespace的使用方法 使用use的目的 use的使用方法 使用namespace的目的: 团队合 ...

  5. CountDownLatch用法实践

    项目中写多线程时,需要判断所有线程是否执行完毕,所以想到了添加累加器来判断.这个累加器使用什么变量,找到了以下2种方式. 1. 类似AtomicInteger这种提供原子操作的类型AtomicInte ...

  6. java反射-- Field 用法实践

    java 反射是一种常用的技术手段, 通过加载类的字节码的方式来获取相关类的一些信息 比如成员变量, 成员方法等. Field 是什么呢? field 是一个类, 位于java.lang.reflec ...

  7. DataBinding初探 数据绑定的用法 ,import 集合类型,绑定的表达式,访问集合类型2

    数据绑定的用法 import语法   <data> <import type="android.view.view"/> </data>   如 ...

  8. ComparatorChain、BeanComparator用法示例(枚举类型排序转)

    工作中遇到按照类的某个属性排列,这个属性是个枚举类型,按照要求的优先级排列. 可以使用ComparatorChain.BeanComparator.FixedOrderComparator实现. 举一 ...

  9. Effective Modern C++翻译(3)-条款2:明白auto类型推导

    条款2 明白auto类型推导 如果你已经读完了条款1中有关模板类型推导的内容,那么你几乎已经知道了所有关于auto类型推导的事情,因为除了一个古怪的例外,auto的类型推导规则和模板的类型推导规则是一 ...

  10. 《Effective Modern C++》翻译--条款2: 理解auto自己主动类型推导

    条款2: 理解auto自己主动类型推导 假设你已经读过条款1关于模板类型推导的内容,那么你差点儿已经知道了关于auto类型推导的所有. 至于为什么auto类型推导就是模板类型推导仅仅有一个地方感到好奇 ...

随机推荐

  1. java 如何根据经纬度查询出一千米内的资源数据

    使用地理信息系统(GIS)的相关技术和算法来实现根据经纬度查询一定范围内的资源数据.以下是一种基本的实现思路: 获取资源数据:首先,您需要有一组资源数据,每个数据都包含了对应资源的经纬度信息. 计算距 ...

  2. 你了解 Java 的类加载器吗?类加载机制是什么?什么是双亲委派机制?

    什么是类加载器,类加载器有哪些? 实现通过类的全限定名获取该类的二进制字节流的代码块叫做类加载器. 主要有一下四种类加载器: 启动类加载器:用来加载 Java 核心类库,无法被 Java 程序直接引用 ...

  3. typescript结构化类型应用两例

    介绍 结构化类型是typescript类型系统的一个重要特性,如果不了解这个特性,则经常会被typescript的行为搞得一头雾水,导致我们期待的行为与实际的行为不一致.今天我们就来看两个例子. 不了 ...

  4. vue_过渡&动画、过滤器、指令

    过度和动画 <html lang="en"> <head> <meta charset="UTF-8"> <title ...

  5. 从 Tableau文件中获取数据方法汇总

    ↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 在实际使用Tableau中经常会遇到需要从已有的tableau文件或仪表板中导出/提取/复制数据,本篇文章整理了相关从Table ...

  6. 前端开发系列073-JQuery篇之源码核心

    本文介绍jQuery 源码的主体结构和关键细节. jQuery是前端开发中绕不开的一个框架,在React和Vue等框架出现前,jQuery无疑是前端开发主流技术栈中不可或缺的框架.它为我们提供了强大的 ...

  7. 3.1k star!推荐一款开源基于AI实现的浏览器自动化插件工具 !

    大家好!今天,我要给大家介绍一款超实用的开源工具--Chrome MCP Server!这款工具不仅能大幅提升我们的工作效率,还能让AI助手(如Claude)直接操控浏览器,实现自动化操作.内容分析等 ...

  8. API开发平台,API服务集成与开发

    API开发平台将可以极大的加速企业的数字化转型步伐,复用已有业务系统的业务能力,随着大中台小前端的框架构发展和规划,企业将面临新时代和新技术的挑战和运行,而API服务集成开发平台将为保障后继大中台项目 ...

  9. Product-Electrical Appliances:"压缩机制冷" 原理 及运用: 冰箱/空调/车载热泵 制冷 + 常用冷媒(制冷剂)大汇总 + www.ap1700.com : 常用物质物料的性质查询平台

    冰箱 + 空调 + 车载热泵制冷原理 压缩机 制冷: 压缩机 连接 有"加注过致冷剂"的全封闭 "密封管路": 制冷剂 通常有"环丙烷".& ...

  10. pandas速成笔记(3)-join/groupby/sort/行列转换

    接上篇继续 ,这回看下一些常用的操作: 一.join 联表查询 有数据库开发经验的同学,一定对sql中的join ... on 联表查询不陌生,pandas也有类似操作 假设test.xlsx的she ...