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

C++现代教程七之模块

 优点

  1. 编译时间减少:
  2. 模块消除了重复解析和编译头文件的需要,从而显著减少了编译时间。特别是在大型项目中,这一点尤为重要。
  3. 更好的封装性:
  4. 模块允许更严格的封装,可以明确地控制哪些符号对外可见。这有助于减少命名冲突和不必要的依赖。
  5. 减少命名冲突:
  6. 模块通过命名空间和模块名称来管理符号,减少了全局命名空间中的命名冲突问题。
  7. 提高代码可读性和维护性:
  8. 模块化的代码结构更加清晰,便于理解和维护。每个模块都有明确的职责和接口,使得代码组织更加合理。
  9. 更好的工具支持:
  10. 模块化的设计使得 IDE 和其他开发工具可以更好地支持代码导航、重构和分析。
  11. 减少宏的使用:
  12. 模块减少了对宏的依赖,因为模块提供了更强大的抽象和封装机制
main.ixx 接口
export module api;
import :part1;
import :part2;export char const* hello();export {int one();int zero();
}export namespace hi{
const char* english();
const char* french();
}
main.cppm 实现

module api;
//module :private;  不可见
char const* hello() { return "hello"; }
char const* world() { return "world"; }
 part1.cppm 分区一
export module api:part1;
int one() { return 1;}
int zero() { return 0;}
 part2.cppm 分区一
export module api:part2;
import :part1;
import <string>;namespace hi{
const char* english() { return "en";}
const char* french() { return "fr";}
const char* test() { return std::to_string(one()).c_str(); }
}
 main.cpp
import <iostream>;
import api;void print(std::string_view msg) {std::cout << msg << std::endl;
}void print(int val) {std::cout << val << std::endl;
}int main() {print(hello());print(one());print(hi::english());
}
 输出

hello
1
en

参考

Overview of modules in C++ | Microsoft Learn

C++20 Module 使用指南 - ihnfsa’s blog

C++现代教程六_#include <iostream> using namespace std; typedef s-CSDN博客


创作不易,小小的支持一下吧!

相关文章:

C++现代教程七之模块

优点 编译时间减少&#xff1a;模块消除了重复解析和编译头文件的需要&#xff0c;从而显著减少了编译时间。特别是在大型项目中&#xff0c;这一点尤为重要。更好的封装性&#xff1a;模块允许更严格的封装&#xff0c;可以明确地控制哪些符号对外可见。这有助于减少命名冲突和…...

AVLTree

1.AVL树的概念 二叉搜索树虽然可以提高查找的效率&#xff0c;但是如果数据有序或者接近有序&#xff0c;二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。为了解决该问题&#xff0c;于是就有了AVLTree。即当向二叉搜索树中插入…...

Java面向对象 C语言字符串常量

1. &#xff08;1&#xff09;. package liujiawei;public class Phone {String brand;double price;public void call(){System.out.println("手机打电话");}public void play(){System.out.println("手机打游戏");} } public class phonetest {public…...

SpringBoot+Thymeleaf电商系统

> 这是一个基于SpringBootThymeleafBootstrap实现的简单电商系统。 > 实现了用户浏览、添加购物车、商品管理等功能&#xff0c;并支持响应式布局。 > 本项目适合JAVA初学者作为入门学习项目 一、部分界面演示 二、技术栈 技术栈中文描述Spring Boot快速开发框架…...

了解数据库并发产生的问题

在数据库管理系统中&#xff0c;并发控制是一个至关重要的方面。随着多个用户或进程同时访问和修改数据库中的数据&#xff0c;如果没有适当的并发控制机制&#xff0c;就可能导致数据不一致、丢失更新、脏读、不可重复读和幻读等问题。在单用户系统中&#xff0c;数据库操作是…...

openstack之guardian介绍与实例创建过程

运行特征 采集模块&#xff1a;扩展Ceilometer&#xff0c;采集存储网、业务网连通性、nova目录是否可读写&#xff1b; 收集模块&#xff1a;将采集到的数据存储到数据库中&#xff1b; 分析模块&#xff1a;根据采集的结果&#xff0c;分析各节点状态&#xff0c;并进行反向检…...

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大 时间&#xff1a;2023年 机构:北京邮电大学 发表在&#xff1a;IEEE TRANSACTIONS ON MULTIMEDIA, VOL. 25, 2023 代码源码地址&#xff1a; pytorch版本&#xff1a;https://github.com/dyh…...

SAP ABAP开发学习——RFC

目录 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接口系统 RFC的通信模式 RFC版本 RFC调用方式 Web Service接口 SAP创建Web Service示例 远程目标的维护 创建远程目标 外部系统访问设置 RFC的调用 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接…...

Elasticsearch里的索引index是什么概念?(ChatGPT回答)

在 Elasticsearch&#xff08;ES&#xff09;中&#xff0c;索引&#xff08;Index&#xff09; 是一种数据结构&#xff0c;用来存储、组织和管理文档数据。它可以理解为数据库中的一张表&#xff0c;但有一些关键的不同之处。索引是 Elasticsearch 全文搜索引擎的核心概念之一…...

安全性测试

安全性测试评估系统在面对各种安全威胁时的防护能力和安全性的过程。以下是安全性测试的一些主要方面和方法&#xff1a; 1. 身份验证和授权测试 测试目标 确保系统能够正确验证用户的身份&#xff0c;并根据用户的权限授予相应的访问权限。测试方法 弱密码测试&#xff1a;尝…...

ComfyUI和Photoshop相结合,PS内实现:文生图,图生图,高清放大,局部重绘,面部修复,设计师福音

本文主要介绍&#xff1a;ComfyUI和Photoshop相结合&#xff0c;一个平台实现&#xff1a;图像生成&#xff0c;放大&#xff0c;局部重绘&#xff0c;面部修复&#xff0c;实时绘画 简直是设计师的福音。 主要包括&#xff1a; Photoshop 的安装以及插件的安装 Creative Cl…...

使用 map 和 reduce 提取对象数组中的 id 并组成新数组

在开发过程中&#xff0c;经常需要对 API 返回的数据进行处理&#xff0c;例如从对象数组中提取某些字段&#xff0c;并将它们组成新的数组。这里我们将介绍如何通过 JavaScript 的 map 和 reduce 方法来完成这一需求&#xff0c;并深入比较这两者的用法与适用场景。 需求&…...

Zero-Shot Relational Learning for Multimodal Knowledge Graphs

摘要 关系学习是知识表示领域&#xff0c;特别是知识图补全&#xff08;KGC&#xff09;领域的一项重要任务。虽然传统单模态环境下的关系学习已经得到了广泛的研究&#xff0c;但在多模态KGC环境下探索关系学习提出了不同的挑战和机遇。其中一个主要挑战是在没有任何相关训练…...

AUTOSAR COM 模块的主要功能导读以及示例

AUTOSAR COM 模块的主要功能 AUTOSAR COM 模块在车载系统中用于管理通信的中间层&#xff0c;主要功能包括: 信号传输与接收&#xff1a; • 提供信号打包和解包功能&#xff0c;将信号数据打包成协议数据单元&#xff08;I-PDU&#xff09;以便传输&#xff0c;或从接收到的…...

VMware下Centos7虚拟机数据盘/data目录(非lvm)不停机热扩容实操

实操环境 VMware&#xff1a;7.0 虚拟机&#xff1a;Centos7 &#xff08;TEST-K8S-Node01&#xff09; 扩容目录&#xff1a;/data &#xff08;20G>>30G&#xff09; 前置操作 注意事项&#xff1a;如果有条件的话&#xff0c;建议先做个主机的全量备份&#xff08;…...

易盾增强版滑块识别/易盾识别/滑块识别/增强版滑块识别/易盾滑块本地识别

易盾增强版滑块识别 计算思路如下&#xff1a; 滑动条拖动距离传入 restrict 算法处理得到 初次值 J J * 率值0.309375 得到滑块偏移量。 滑块的旋转角度滑块偏移量*attrs 所以滑块偏移量滑块的旋转角度/attrs 通过滑块偏移量 求出 滑动条拖动距离 # 应用高斯模糊warped_…...

DMRl-Former用于工业过程预测建模和关键样本分析的数据模式相关可解释Transformer网络

DMRl-Former用于工业过程预测建模和关键样本分析的数据模式相关可解释Transformer网络 Liu, Diju, et al. “Data mode related interpretable transformer network for predictive modeling and key sample analysis in industrial processes.” IEEE Transactions on Indust…...

向量模型Jina Embedding: 从v1到v3论文笔记

文章目录 Jina Embedding: 从v1到v3Jina Embedding v1数据集准备训练过程 Jina Embedding v2预训练修改版BERT在文本对上微调在Hard Negatives上微调 Jina Embedding v2 双语言预训练修改版BERT在文本对上微调用多任务目标微调 Jina Embedding v3预训练在文本对上微调训练任务相…...

Spring学习笔记(一)

一 、Spring概述 (一)Spring是什么 Spring是一个分层的Java SE/EE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和 AOP&#xff08;Aspect Oriented Programming&#xff1a;面…...

Java编程基础

Java是一种广泛使用的编程语言&#xff0c;以其跨平台兼容性、面向对象的特性和健壮的安全性而闻名。本篇文章将带你了解Java编程的基础知识。 Java简介 Java是由Sun Microsystems&#xff08;现在是Oracle Corporation的一部分&#xff09;在1995年发布的。它是一种静态类型…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...