c++ using定义类型别名的具体使用

 更新时间:2023年08月02日 15:30:58   作者:心不在于身  
本文主要介绍了c++ using定义类型别名的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在未引入using之前定义类型的别名通常用typedef, 下面是一些typedef定义类型别名的用法

typedef unsigned int u_int; // 相当于给unsigned int起了一个别名叫做u_int;
u_int a; // 将a声明为unsigned int类型.
typedef std::map<std::string, int> map_s_i;
map_s_i m1;

 如何在map中保持前面部分不变, 后面是用户自定义的类型呢? 可以参考以下代码

template<typename T>
struct map_s  // 定义一个结构类
{
    typedef std::map<std::string, T> type; // 其中第二个参数我们可以自己指定类型.
}
map_s<int>::type m1 // 等价于 std::map<std::string, int> m1; 可以自己指定类型.

对于上述写法使用using可以更加的简便

template<typename T>
using map_s = std::map<std::string, T> type;
map_s<int> m2;

using在用于定义类型, (定义类型模板)的时候, 包含了typedef的所有用法, 下面来看一些使用using定义类型别名的例子

typedef unsigned int u_int; // 使用typedef的方式
using u_int = unsigned int; // 使用using的形式
// 定义函数指针
typedef int(*pf)(int, int)
using pf = int(*)(int, int);

以下是一些使用using定义类型别名的练习

定义一个自定义函数参数类型和返回类型的函数指针模板

template<typename T>
using PF = T(*)(T, T);
int func(int a, int b)
{
    cout << a << " " << b << endl;
}
PF<int> pf // PF是一个函数指针类型, pf是一个函数指针
pf(2, 3);

在using中使用这种模板,既不是类模板, 也不是函数模板, 我们可以看成一种新的模板类型, 类型模板(别名)

补充知识,有时候系统自动去推断类型,可能会造成错误, 需要自己手动提供指定参数

template<typename T1, typename T2, typename T3>
T1 sum(T2 a, T3 b)
{
    T1 res = a + b;
    return res;
}
auto result = sum<int>(2000000000, 2000000000); // 自动推断会导致结果出错, 超过int范围
auto result = sum<int, double, double>(2000000000, 2000000000); // 指定类型,不会出错。

到此这篇关于c++ using定义类型别名的具体使用的文章就介绍到这了,更多相关c++ using定义类型别名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中getopt()函数和select()函数的使用方法

    C语言中getopt()函数和select()函数的使用方法

    这篇文章主要介绍了C语言中getopt()函数和select()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言折半查找法的由来及使用详解

    C语言折半查找法的由来及使用详解

    折半查找法也叫做⼆分查找,顾名思义就是把数据分成两半,再判断所查找的key在哪⼀半中,再重复上述步骤知道找到⽬标key,下面这篇文章主要给大家介绍了关于C语言折半查找法的相关资料,需要的朋友可以参考下
    2022-08-08
  • C++中vector容器的常用操作方法实例总结

    C++中vector容器的常用操作方法实例总结

    vector容器一般被用作创建动态数组,动态数组就像Python中的list结构一样,可以比普通数组拥有更丰富操作方法,下面就为大家整理了一些最常用的操作:
    2016-05-05
  • C++ io_uring的使用小结

    C++ io_uring的使用小结

    io_uring 是 Linux 内核在 5.1 版本引入的一套全新的、高性能的异步 I/O  接口,本文就来详细的介绍一下C++ io_uring的使用小结,感兴趣的可以了解一下
    2026-01-01
  • Qt实现编辑数据库数据的方法详解

    Qt实现编辑数据库数据的方法详解

    这篇文章主要为大家详细介绍了Qt是如何实现编辑数据库数据的,文中的示例代码简洁易懂,对我们深入了解QT有一定的帮助,感兴趣的小伙伴可以了解一下
    2023-02-02
  • C++实现头文件保护机制

    C++实现头文件保护机制

    头文件保护机制是一种防止头文件被重复包含的技术,它主要借助 #ifndef、#define 和 #endif 这些预处理指令来达成,本文就来详细的介绍一下,感兴趣的可以了解一下
    2025-04-04
  • vscode+wsl运行编译c++的实现

    vscode+wsl运行编译c++的实现

    本文主要介绍了vscode+wsl运行编译c++的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • C语言中字符串常用操作总结

    C语言中字符串常用操作总结

    C语言是一种非常流行的编程语言,它支持各种数据类型,包括整数、浮点数、字符和字符串等,本文将介绍 C语言中字符串的相关知识,包括字符串的定义、初始化、赋值等,需要的可以参考一下
    2023-05-05
  • C++计算任意权值的单源最短路径(Bellman-Ford)

    C++计算任意权值的单源最短路径(Bellman-Ford)

    这篇文章主要为大家详细介绍了C++计算任意权值的单源最短路径,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++虚函数到动态绑定的核心原理深入分析

    C++虚函数到动态绑定的核心原理深入分析

    这篇文章主要介绍了C++虚函数到动态绑定的核心原理,C++​​虚函数​​通过 ​虚函数表和​​虚指针实现动态绑定,使得基类指针引用在运行时能根据对象实际类型调用正确的函数版本,从而支持多态,需要的朋友可以参考下
    2025-05-05

最新评论