c/c++类型别名定义


author: hjjdebug
date: 2025年 05月 28日 星期三 12:54:25 CST
descrip: c/c++类型别名定义:


文章目录

  • 1. #define 是宏替换.
  • 2. c风格的typedef 通用形式 typedef type_orig alias
  • 3. c++风格的using 为类型定义别名的一般格式: using alias = type_orig
  • 4. using 的优点: 可以直接使用模板类型,
  • 5.测试代码, 顺便测试一下引用折叠.

#define, typedef, using 都可以定义类型别名.

1. #define 是宏替换.

它可以定义任何东西,不只是类型,实现以简单换复杂.
带参宏也可以定义非常复杂的替换.
缺点是编译器只是进行字符串替换. 编译期无类型检查.复杂定义时逻辑不清晰,

c格式的typedef和c++格式的using 才是专门为类型定义别名而生.

2. c风格的typedef 通用形式 typedef type_orig alias

例如:
typedef unsigned int u_int;
typedef int(*add)(int i1,int i2);

3. c++风格的using 为类型定义别名的一般格式: using alias = type_orig

例如:
using u_int=unsigned int;
using add=int(*)(int i1,int i2);

4. using 的优点: 可以直接使用模板类型,

例如:
template
using Vec = std::vector;

typedef 不能直接使用模板类型.
例如:
template
typedef T&& doubleR; // error: template declaration of ‘typedef’

typedef 要想使用模板类型,只能外包装一个类才可以使用.
例如:
template
struct DoubleRefHelper {
typedef T&& type; // 在类模板中用typedef定义别名, 小名type是属于类的.
};

5.测试代码, 顺便测试一下引用折叠.

$ cat main.cpp
#include <stdio.h>
//模板类中, using 更方便,可直接使用模板类型, typedef还要定义在类模板中
template <typename T>
using DoubleRef = T&&;  //T 可以直接使用/*template <typename T>typedef T&&  doubleR;  //  error: template declaration of ‘typedef’*/
template <typename T>
struct DoubleRefHelper {typedef T&& type;  // 在类模板中用typedef 使用模板类型定义别名
};int main()
{  //引用类型推导规则.DoubleRef<int> x = 3;  // int + &&实际类型为 int&&(折叠后)DoubleRef<int&> y = x;  // int & + &&实际类型为 int&(折叠后)DoubleRef<int&&> z = 5;  // int && + &&实际类型为 int&&(折叠后)printf("x:%d,y:%d,z:%d\n",x,y,z);// 使用时需加class_name和::type, 小名type是属于类的.DoubleRefHelper<int>::type i = 8;  // 等价于int&&printf("i:%d\n",i);return 0;
}

执行结果:

$ ./tt
x:3,y:3,z:5
i:8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Virtuoso中对GDS文件进行工艺库转换的方法

如果要对相同工艺节点下进行性能评估&#xff0c;可以尝试将一个厂商的GDS文件转换到另一个厂商&#xff0c;不过要注意的是不同厂商&#xff08;比如SMIC和TSMC&#xff09;之间的DRC规则&#xff0c;尽量采用两个DRC中的约束较为紧张的厂商进行设计&#xff0c;以免转换到另外…

Kubernetes 中部署 kube-state-metrics 及 Prometheus 监控配置实战

文章目录 Kubernetes 中部署 kube-state-metrics 及 Prometheus 监控配置实战环境准备创建监控命名空间准备配置文件创建 ServiceAccount配置 RBAC 权限部署 kube-state-metrics部署node_exporter(可选)验证服务账号 TokenPrometheus 配置示例小结验证增加Grafana面板增加prome…

《重塑认知:Django MVT架构的多维剖析与实践》

MVT&#xff0c;即Model - View - Template&#xff0c;是Django框架独特的架构模式。它看似简单的三个字母&#xff0c;实则蕴含着深刻的设计哲学&#xff0c;如同古老智慧的密码&#xff0c;解开了Web应用开发的复杂谜题。 模型&#xff0c;是MVT架构中的数据核心&#xff0…

【JVM】初识JVM 从字节码文件到类的生命周期

初识JVM JVM&#xff08;Java Virtual Machine&#xff09;即 Java 虚拟机&#xff0c;是 Java 技术的核心组件之一。JVM的本质就是运行在计算机上的一个程序&#xff0c;通过软件模拟实现了一台抽象的计算机的功能。JVM是Java程序的运行环境&#xff0c;负责加载字节码文件&a…

人工智能在智能零售中的创新应用与未来趋势

随着电子商务的蓬勃发展和消费者需求的不断变化&#xff0c;零售行业正面临着前所未有的挑战和机遇。智能零售作为零售行业的重要发展方向&#xff0c;通过引入人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;、大数据和云计算等前沿技术&#xff0c;正…

DeepSeek 赋能智能物流:解锁仓储机器人调度的无限可能

目录 一、智能物流仓储机器人调度现状1.1 传统调度面临的挑战1.2 现有智能调度的进展与局限 二、DeepSeek 技术探秘2.1 DeepSeek 核心技术原理2.2 DeepSeek 的独特优势 三、DeepSeek 在智能物流仓储机器人调度中的创新应用3.1 智能任务分配与调度3.2 路径规划与避障优化3.3 实时…

Vue CLI创建vue项目,安装插件

Vue CLI创建vue项目&#xff0c;安装插件 一、创建项目1. 安装Vue CLI2. 创建项目 二、安装插件routerlesssassjquery 一、创建项目 1. 安装Vue CLI npm install -g vue/cli2. 创建项目 vue create project cd project二、安装插件 router npm install vue-router # 对于 …

小白成长之路-Linux程序管理(二)

文章目录 一、源码包&#xff08;编译&#xff09;安装1.安装前先查看磁盘大小2.压缩包的位置3.执行编译 二、二进制安装三、Linux操作系统启动流程3.1概述3.2启动流程核心阶段1.电源与固件阶段2.引导加载程序3.内核初始化4.systemd初始化进程5. 用户登录阶段 四、systemd管理机…

Ansible模块——Ansible的安装!

Ansible 安装 Ansible 有三种安装方式&#xff0c;源码安装、发行版安装和 Python 安装。 使用发行版安装或 Python 安装两种方式时&#xff0c;Ansible 的安装包有两个&#xff0c;区别如下&#xff1a; • ansible-core&#xff1a;一种极简语言和运行时包&#xff0c;包含…

《全面解析鸿蒙相关概念:鸿蒙、开源鸿蒙、鸿蒙 Next 有何区别》

大家好&#xff0c;这里是程序员晚枫&#xff0c;最近接了一个和鸿蒙电脑有关的商单&#xff0c;所以专门花时间研究了一下和鸿蒙有关的概念。 鸿蒙系统相关概念主要有以下三个&#xff0c;它们之间存在多方面的区别&#xff0c;以下是具体介绍&#xff1a; OpenHarmony 定义…

C# 数组与字符串:全面解析与应用实践

在C#编程语言中&#xff0c;数组和字符串是两种最基础也是最重要的数据类型。无论是简单的控制台应用程序&#xff0c;还是复杂的企业级系统&#xff0c;数组和字符串都扮演着不可或缺的角色。本文将全面深入地探讨C#中数组和字符串的特性、使用方法、性能考量以及实际应用场景…

VR 技术在农业领域或许是一抹新曙光​

在科技日新月异的今天&#xff0c;VR(虚拟现实)技术已不再局限于游戏、影视等娱乐范畴&#xff0c;正逐步渗透到各个传统行业&#xff0c;为其带来全新的发展契机&#xff0c;农业领域便是其中之一。VR 技术利用计算机生成三维虚拟世界&#xff0c;给予用户视觉、听觉、触觉等多…

SPEAR开源程序是用于逼真演示 AI 研究的模拟器

​一、软件介绍 文末提供程序和源码下载 SPEAR开源程序是用于逼真具身 AI 研究的模拟器 二、AI 研究的模拟器 交互式模拟器正在成为训练具体代理的强大工具&#xff0c;但现有的模拟器存在内容多样性、物理交互性和视觉保真度有限的问题。我们通过引入 SPEAR&#xff1a;照片…

第1章 Redis 概述

一、Redis 简介 Redis,Remote Dictionary Server,远程字典服务,由意大利人Salvatore Sanfilippo(又名Antirez)开发,是一个使用ANSI C 语言编写&#xff64;支持网络&#xff64; 可基于内存亦可持久化的日志型&#xff64;NoSQL 开源内存数据库,其提供多种语言的API&#xff61…

图论学习笔记 5 - 最小树形图

我们不废话&#xff0c;直接进入正题&#xff1a;最小树形图&#xff0c;一个名字看起来很高级的东西。 声明&#xff1a;为了便于理解&#xff0c;可能图片数量会有亿点点多。图片尺寸可能有的较大。 概念 最小树形图的英文是 Directed Minimum Spanning Tree。 相信懂英文…

力扣面试150题--完全二叉树的节点个数

Day 51 题目描述 思路 根据完全二叉树的规律&#xff0c;完全二叉树的高度可以直接通过不断地访问左子树就可以获取&#xff0c;判断左右子树的高度: 1. 如果相等说明左子树是满二叉树, 然后进一步判断右子树的节点数(最后一层最后出现的节点必然在右子树中&#xff09; 2. 如…

社区造数服务接入MCP|得物技术

一、背景 ​ 今年 MCP 的概念非常火&#xff0c;市面上也涌现出了一大批 MCP 相关工具。作为技术一线者&#xff0c;都会按捺不住地去实操一下&#xff0c;很早的时候就有个设想&#xff0c;如果把我们的测试工具都改造为符合 MCP 服务协议标准&#xff0c;然后全部接入 AI A…

Mysql 查询时间段内的sql优化

Mysql 查询时间段内的sql优化 一说写到查询某个时间段的sql查询,我们就会使用DATE_FORMAT函数格式化日期字段: 比如查询某年某月的数据,我们可能常用的方式如下 DATE_FORMAT(pay_time,%Y-%m)=DATE_FORMAT(now(),%Y-%m) 但是这样做会使索引失效,尤其在数据量越来越多的情况…

用 Deepseek 写的 html+js 密码生成器

下面是一个功能完整的密码生成器HTMLJS实现&#xff0c;包含数字、小写字母、大写字母、符号、避免重复字符和密码长度设置功能。 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&…

WPF绑定

如何使用绑定去改变事件驱动的关系。 先介绍一下标签扩展 目录 控件与控件之间的绑定 代码分析 绑定语法详解 1. Binding - 绑定标记 2. ElementName=slider - 绑定源 3. Path=Value - 绑定路径 不同控件属性的默认模式: 控件和属性绑定 1. 数据模型类的作用 2. 窗…