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

C++中的格式化字符串

C++中的格式化字符串

fmt 库简介

{fmt}是一个开源的、现代化的C++格式化库,由Victor Zverovich创建。它提供了一种安全、快速且方便的字符串格式化方式,其设计理念受到了Python的str.format()的启发

fmt库的主要特点

  1. 易用性:使用简洁的语法,基于花括号{}的占位符
  2. 类型安全:在编译时检查格式字符串和参数类型匹配
  3. 高性能:比标准库的printfiostream更快
  4. 可扩展:支持自定义类型的格式化
  5. 丰富的格式化选项:对齐、填充、精度等控制

Ubuntu下安装fmt库

使用下面的命令进行安装:

sudo apt install libfmt-dev

安装完成后,可以检查fmt库是否正确安装。例如,查看头文件是否存在:

ls /usr/include/fmt

如果目录存在且包含相关头文件,则说明安装成功

也可以通过下面的命令查看fmt库版本:

fmt --version

基本格式化

fmt库提供了简单直观的基本格式化功能,使用花括号{}作为参数占位符:

#include <fmt/core.h>
#include <string>int main() 
{int number = 42;double pi = 3.14159;std::string name = "C++";// 基本格式化std::string result = fmt::format("数字是 {}", number);// 结果: "数字是 42"// 多个参数按顺序替换,类似于printfstd::string result2 = fmt::format("{} 的值约为 {}", name, pi);// 结果: "C++ 的值约为 3.14159"// 直接输出fmt::print("程序运行结果: {}\n", "成功");// 输出: "程序运行结果: 成功"
}

基本格式化遵循参数与占位符按位置一一对应的原则,简单易用且类型安全

带索引的参数

fmt库支持通过索引指定参数顺序,索引从0开始,可以重复使用同一参数:

#include <fmt/core.h>
#include <string>int main() 
{int x = 10;int y = 20;std::string language = "C++";// 使用索引指定参数std::string result = fmt::format("{0} + {1} = {2}", x, y, x + y);// 结果: "10 + 20 = 30"// 重复使用同一参数std::string result2 = fmt::format("{0}真是太强大了!我爱{0}!", language);// 结果: "C++真是太强大了!我爱C++!"// 改变参数顺序// 即0代表第一个参数,1代表第二个参数// 用下标位置代表替换位置std::string result3 = fmt::format("坐标:({1}, {0})", x, y);// 结果: "坐标:(20, 10)"// 混合使用索引和自动位置// 注意: 一旦使用了索引,所有占位符都应使用索引std::string result4 = fmt::format("{0}的值是{1}", "π", 3.14159);// 结果: "π的值是3.14159"
}

带索引的参数格式化使代码更灵活,特别是在需要重复使用某个参数或调整参数顺序时非常有用

格式说明符

基本介绍

格式说明符让您可以控制数据的呈现方式,语法为{[参数位置]:[格式说明]}

#include <fmt/core.h>
#include <string>int main() 
{int number = 42;double pi = 3.14159265359;// 数值进制表示std::string hex = fmt::format("十六进制: {:#x}", number);  // "十六进制: 0x2a"std::string oct = fmt::format("八进制: {:#o}", number);    // "八进制: 052"std::string bin = fmt::format("二进制: {:#b}", number);    // "二进制: 0b101010"// 浮点数精度std::string precise = fmt::format("π值保留两位小数: {:.2f}", pi);  // "π值保留两位小数: 3.14"std::string scientific = fmt::format("科学计数法: {:.2e}", pi);     // "科学计数法: 3.14e+00"// 宽度和对齐std::string right = fmt::format("右对齐:|{:10}|", "文本");     // "右对齐:|      文本|"std::string left = fmt::format("左对齐:|{:<10}|", "文本");     // "左对齐:|文本      |"std::string center = fmt::format("居中:|{:^10}|", "文本");     // "居中:|   文本   |"// 填充字符// 中文占两个字符,剩余11个字符用*填充,总共15个字符std::string fill = fmt::format("|{:*^15}|", "标题");          // "|*****标题******|"// 符号控制std::string always_sign = fmt::format("{:+d}", 42);           // "+42"std::string space_sign = fmt::format("{: d}", 42);            // " 42"// 千位分隔符std::string grouped = fmt::format("{:L}", 1000000);           // "1,000,000" (依赖地区设置)// 多种格式组合std::string combined = fmt::format("{:*^+10.2f}", 42.1234);   // "**+42.12**"return 0;
}
常用格式说明符

格式说明符的完整语法是:{[参数索引]:[填充字符][对齐][符号][#][0][宽度][.精度][类型]}

  • 填充和对齐

    • <:左对齐
    • >:右对齐(默认)
    • ^:居中
  • 符号

    • +:总是显示正负号
    • -:只对负数显示负号(默认)
    • 空格:正数前加空格,负数前加负号
  • 类型

    • d:十进制整数
    • x/X:小写/大写十六进制
    • o:八进制
    • b/B:小写/大写二进制
    • f/F:固定小数点
    • e/E:科学计数法
    • g/G:通用格式(自动选择 f 或 e)
    • s:字符串
  • 特殊标记

    • #:显示前缀(0x、0b 等)或小数点
    • 0:用零填充数字

fmt库的格式说明符系统非常强大且灵活,可以满足各种复杂的字符串格式化需求

fmt的高级特性

  1. 自定义类型格式化

    struct Point {int x, y;
    };template <> 
    struct fmt::formatter<Point> {constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }template <typename FormatContext>auto format(const Point& p, FormatContext& ctx) {return fmt::format_to(ctx.out(), "({}, {})", p.x, p.y);}
    };// 使用
    Point p{10, 20};
    fmt::print("点坐标: {}", p);  // 输出: 点坐标: (10, 20)
    
  2. 颜色支持

    #include <fmt/color.h>fmt::print(fg(fmt::color::red), "这段文字是红色的\n");
    fmt::print(bg(fmt::color::blue) | fg(fmt::color::white), "蓝底白字\n");
    
  3. 格式化到容器或内存

    std::vector<char> out;
    fmt::format_to(std::back_inserter(out), "Hello, {}!", "world");char buffer[100];
    auto result = fmt::format_to_n(buffer, 100, "The answer is {}.", 42);
    

std::format(C++20)

std::format是C++20引入的标准库功能,其设计和API直接基于{fmt}

基本用法

#include <format>
#include <string>int main()
{int answer = 42;std::string name = "C++";// 基本格式化std::string s = std::format("Hello, {}! The answer is {}", name, answer);// 带格式说明符std::string s2 = std::format("十进制: {0:d}, 十六进制: {0:#x}, 八进制: {0:#o}", answer);// 对齐和填充// Unicode编码,中文占3个字符std::string s3 = std::format("{:*^10}", "居中"); // **居中**return 0;
}

常用格式说明符

格式说明符的语法为:{[参数位置]:[填充][对齐][符号][#][0][宽度][.精度][类型]}

  • 填充和对齐< (左对齐),> (右对齐),^ (居中)

    std::format("{:<10}", "左对齐");   // "左对齐 "
    std::format("{:>10}", "右对齐");   // " 右对齐"
    std::format("{:^10}", "居中");     // "  居中  "
    std::format("{:*^10}", "居中");    // "**居中**"
    
  • 符号+ (总是显示符号),- (仅负数显示符号), (空格,正数前加空格)

    std::format("{:+}", 42);    // "+42"
    std::format("{: }", 42);    // " 42"
    
  • 数值格式

    std::format("{:d}", 42);    // 十进制: "42"
    std::format("{:#x}", 42);   // 十六进制带前缀: "0x2a"
    std::format("{:.2f}", 3.14159); // 浮点数保留2位小数: "3.14"
    

fmt与std::format的对比

相似点

  1. 语法:两者使用相同的基于{}的格式语法
  2. 类型安全:都在编译时进行类型检查
  3. API设计:std::format直接基于fmt库设计

不同点

  1. 可用性:fmt可用于任何C++版本,而std::format需要C++20
  2. 功能集:fmt提供更多高级功能(颜色、I/O 等)
  3. 性能:由于不同的实现,性能可能有细微差异
  4. 命名空间:fmt使用fmt::命名空间,标准库使用std::

代码兼容性示例

可以编写同时支持两种库的代码:

#if __cplusplus >= 202002L && defined(__cpp_lib_format)#include <format>namespace fmt_ns = std;
#else#include <fmt/core.h>namespace fmt_ns = fmt;
#endifstd::string message = fmt_ns::format("值: {}", 42);

实际应用场景

  1. 日志系统:格式化各类日志消息
  2. 用户界面:生成格式化的显示文本
  3. 配置文件生成:创建具有特定格式的配置
  4. 报告生成:生成格式化的数据报告
  5. 错误信息:创建详细的错误描述

相关文章:

C++中的格式化字符串

C中的格式化字符串 fmt 库简介 {fmt}是一个开源的、现代化的C格式化库&#xff0c;由Victor Zverovich创建。它提供了一种安全、快速且方便的字符串格式化方式&#xff0c;其设计理念受到了Python的str.format()的启发 fmt库的主要特点 易用性&#xff1a;使用简洁的语法&a…...

民办生从零学C的第十二天:指针(1)

每日励志&#xff1a;拼搏十年&#xff0c;征战沙场&#xff0c;不忘初心&#xff0c;努力成为一个浑身充满铜臭味的有钱人。 一.内存和地址 1.内存 计算机内存是一系列存储单元的集合&#xff0c;每个存储单元都有唯一的地址来标识。这些存储单元用于存储程序的数据和指令。…...

复习Vue136~180

1.使用create-vue创建项目 npm init vuelatest 项目目录和关键文件&#xff1a; new Vue() 创建一个应用实例 > createApp()、createRouter() createStore() 、将创建实例进行了封装&#xff0c;保证每个实例的独立封闭性。 禁用vue2的插件vuter 使用vue3的插件volar scrip…...

高炉项目中DeviceNET到Ethernet的转换奥秘

在工业自动化的世界中&#xff0c;高炉项目中的数据通信至关重要。其中DeviceNET和Ethernet作为两种主流的网络协议&#xff0c;扮演着不可或缺的角色。它们之间的转换不仅仅是技术上的桥梁&#xff0c;更是实现信息高效传递的关键。今天&#xff0c;我们就来揭开从DeviceNET到…...

awk之使用详解(Detailed Explanation of Using AWK)

awk使用详解 1. 入门 1.1 什么是 awk&#xff1f; ①Awk是一种文本处理工具&#xff0c;适用于处理结构化数据&#xff0c;例如表格数据。 ②它可以读取一个或多个文本文件&#xff0c;并执行模式扫描和处理等指定的操作。 ③基本逻辑涉及数据的提取&#xff0c;排序和计算…...

TDR阻抗会爬坡? 别担心,不是你的错,你只是不够了解TDR!

在背板系统或任何长走线设计里&#xff0c;你大概都碰过这画面&#xff1a; TDR 曲线一开始乖乖在 92 Ω&#xff0c;但越往末端、阻抗越爬越高&#xff0c;来到最高 97 Ω&#xff0c;心里瞬间凉半截 &#x1f612; &#xff0c;「难不成... 板厂又翻车了吗&#xff1f;」 然…...

TypeScript之基础知识

基础知识 1. 基本类型 类型描述string字符串&#xff08;如 "hello"&#xff09;number数字&#xff08;整数或浮点数&#xff0c;支持二进制、八进制、十六进制&#xff09;boolean布尔值&#xff08;true/false&#xff09;null空值&#xff08;需显式声明&#x…...

SNMP协议之详解(Detailed Explanation of SNMP Protocol)

SNMP协议之详解 一、前言 SNMP&#xff0c;被形象地喻为网络世界大的工具箱&#xff0c;使他们能的“智慧守护者”&#xff0c;它为网络管理员装备了一套功能强够实现对网络设备状态的实时监控、性能数据的全面收集、远程配置的灵活管理以及故障事件的即时响应。借助SNMP&…...

机器学习-入门-线性模型(2)

机器学习-入门-线性模型(2) 3.4广义线性回归 一般形式&#xff1a; y g − 1 ( w T x b ) y g^{-1} \left( w^T x b \right) yg−1(wTxb) 单调可微的联系函数 (link function) 令 g ( ⋅ ) ln ⁡ ( ⋅ ) g(\cdot) \ln (\cdot) g(⋅)ln(⋅) 则得到对数线性回归 ln ⁡…...

【问题】docker容器修改环境变量的方式

问题 启动n8n之后&#xff0c;docker容器提示&#xff1a; There is a deprecation related to your environment variables. Please take the recommended actions to update your configuration: 2025-04-28 09:20:08 - N8N_RUNNERS_ENABLED -> Running n8n without tas…...

基于 Spring Boot 瑞吉外卖系统开发(八)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;八&#xff09; 自动填充公共字段 MyBatis-Plus公共字段自动填充&#xff0c;也就是在插入或者更新的时候为指定字段赋予指定的值&#xff0c;使用它的好处就是可以统一对这些字段进行处理&#xff0c;降低了冗余代码的数量。本…...

LeetCode热题100--560.和为K的子数组(前缀和)--中等

1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;nums […...

搭建 Spark YARN 模式集群指南

在大数据处理领域&#xff0c;Apache Spark 凭借其卓越的性能和易用性广受青睐。而 YARN&#xff08;Yet Another Resource Negotiator&#xff09;作为 Hadoop 的资源管理框架&#xff0c;能高效管理集群资源。将 Spark 与 YARN 结合&#xff0c;以 YARN 模式搭建集群&#xf…...

服务器部署,Nginx安装和配置

Nginx简介 Nginx是一款轻量级和高性能的web服务器、反向代理服务器和电子邮件代理服务器。你可以使用Nginx实现网页的部署&#xff0c;解决跨域问题实现邮件服务器&#xff0c;甚至Nginx也可以实现音视频推流拉流服务器&#xff0c;Nginx可以实现的功能远超你的想象&#xff0…...

Java后端接口调用拦截处理:注解与拦截器的实现

在Java开发中&#xff0c;对后端接口调用进行拦截处理是一种常见的需求&#xff0c;通常用于权限验证、Token校验、状态更新等操作。本文将围绕 Spring框架的拦截器&#xff08;Interceptor&#xff09;、Spring AOP&#xff08;面向切面编程&#xff09; 和 Spring Security 三…...

C++(初阶)(十四)——多态

多态 面向对象的其中一大特征。 多态多态的定义及构成多态的构成条件多态的实现条件多态的分类编译时多态性运行时的多态性 虚函数定义不能成为虚函数的函数 虚函数重写&#xff08;覆盖&#xff09;选择题虚函数重写的其他问题析构函数的重写override 和final关键字重载/重写…...

PyQt6基础_QThread

目录 前置 代码&#xff1a; 运行 正常运行 QThread运行报错 视频 前置 1 PySide6.QtCore.QThread - Qt for Python QThread官方文档 2 长时间任务可以放到QThread中执行&#xff0c;避免占用主线程导致界面卡顿无法操作 代码&#xff1a; import traceback,sys fro…...

工业通讯现场中关于EtherCAT转TCPIP网关的现场应用

在当今工业自动化的浪潮中&#xff0c;EtherCAT技术以其高效、实时的特性成为了众多制造业的首选。然而&#xff0c;随着工业互联网的发展&#xff0c;对于数据的远程访问和云平台集成的需求日益增长&#xff0c;这就需要将EtherCAT协议转化为更为通用的TCP/IP协议。于是开疆智…...

vite创建vue3项目并进行配置

创建项目 方式一 执行以下命令 之后输入项目名称 选择框架 选择语言 例如 pnpm create vite此方式创建的项目较为干净 0手起步 只包含一些基础依赖 例如vue vite等 项目目录如下 "scripts": {"dev": "vite","build": "vue-tsc -…...

LeetCode 热题 100_最小路径和(92_64_中等_C++)(多维动态规划)

LeetCode 热题 100_最小路径和&#xff08;92_64&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;多维动态规划&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;多维动态规划&…...

关于常量指针和指向常量的指针

关于指针&#xff0c;对于常量指针和指向常量的指针也是傻傻分不清。看到定义时&#xff0c;不知道是指针不能变&#xff0c;还是指针指向的内容不能变量。 先看形式&#xff1a; const char * A; char * const B; 这两种有什么区别&#xff1f;傻傻分不清。 A这种定义&am…...

新时代下的存储过程开发实践与优化

随着现代应用系统的复杂度不断增加&#xff0c;数据库作为核心的数据存储和处理引擎&#xff0c;其性能和可靠性显得尤为重要。存储过程&#xff08;Stored Procedure&#xff09;作为一种封装在数据库中的应用逻辑&#xff0c;使得开发者能够在数据库层面实现数据操作、数据校…...

4月28日日记

2025年4月28日 星期一 晴 今天过得格外充实&#xff0c;也充满了收获与喜悦。 下午&#xff0c;我参加了学校的五四述职大会。各个学院的团委书记依次上台&#xff0c;汇报过去一年的工作成果。看着大家在台上分享着各自学院的精彩故事&#xff0c;我深受触动。他们所展示的活…...

大模型性能测试

当我们部署了大模型并对外提供服务时&#xff0c;我们通常都想了解一下大模型能够支持多少个并发访问&#xff0c;在不同的并发数下&#xff0c;模型的性能如何。了解这些信息有助于我们更好的对算力进行评估&#xff0c;为用户带来更好的性能体验。 大模型通常是通过API接口的…...

利用 Google Earth Engine 探索江宁区 2010 - 2020 年 EVI 时空变化

引言 增强型植被指数&#xff08;Enhanced Vegetation Index&#xff0c;EVI&#xff09;是一种用于量化植被生长状态和覆盖程度的重要指标&#xff0c;它在监测植被动态、生态环境评估以及气候变化研究等领域发挥着关键作用。Google Earth Engine&#xff08;GEE&#xff09;…...

IEC 61850标准协议解读 2.基于Java的MMS实现

专栏文章目录 第一章 IEC 61850标准协议解读 0.导言 第二章 IEC 61850标准协议解读 1.建模讲解 第三章 IEC 61850标准协议解读 2.基于Java的MMS实现 目录 专栏文章目录前言1 依赖库引入2 创建服务端3 创建客户端4 读写模型4.1 服务端读写4.2 客户端读写 5.报告6 文件服务6.1 读…...

花费7元训练自己的GPT 2模型

在上一篇博客中&#xff0c;我介绍了用Tensorflow来重现GPT 1的模型和训练的过程。这次我打算用Pytorch来重现GPT 2的模型并从头进行训练。 GPT 2的模型相比GPT 1的改进并不多&#xff0c;主要在以下方面&#xff1a; 1. GPT 2把layer normalization放在每个decoder block的前…...

【android bluetooth 协议分析 06】【l2cap详解 10】【通过avdtp连接流程,感受l2cap通道的生命周期变化】

本篇我们通过分析一个具体的实例&#xff0c;来直观感受一下 l2cap 中通道的 状态变化。 1. 环境描述&#xff1a; 车机&#xff1a; a2dp sink手机: a2dp source场景&#xff1a; 手机主动 触发 连车机 声明一下&#xff1a; 分析的btsnoop 和 logcat 还有源码&#xff0c;…...

如何在idea中写spark程序。

要在IntelliJ IDEA中编写Spark程序&#xff0c;你可以按照以下步骤进行&#xff1a; 1. 安装和配置Java&#xff1a;确保你的计算机上已经安装了Java Development Kit (JDK)&#xff0c;并且已配置好 JAVA_HOME 环境变量。 2. 安装IntelliJ IDEA&#xff1a;下载并安装Inte…...

Pytest-mark使用详解(跳过、标记、参数 化)

1.前言 在工作中我们经常使用pytest.mark.XXXX进行装饰器修饰&#xff0c;后面的XXX的不同&#xff0c;在pytest中有不同的作 用&#xff0c;其整体使用相对复杂&#xff0c;我们单独将其抽取出来做详细的讲解。 2.pytest.mark.skip()/skipif()跳过用例 import pytest #无条…...

[Android] GKD v1.10.3

[Android] GKD 链接&#xff1a;https://pan.xunlei.com/s/VOOwKvmwpLoLl7fLi6wJZKK-A1?pwd8mey# GKD&#xff08;详情请戳 作者项目地址&#xff09;是一款免费开源简洁多规则的自动跳过广告的软件&#xff0c;整体基于kotlin开发&#xff0c;免root即可使用。简而言之&am…...

C22-作业练习之最大公约数与最小公倍数

作业练习之最大公约数与最小公倍数 代码 #include <stdio.h> int main() {//变量初始化int m,n;int i,gcd,lcm;//数据录入printf("请输入两个整数:");scanf("%d %d",&m,&n);//求最大公约数int min(m<n)?m:n; //找m与n的最小值for(imi…...

信号完整性简介第一篇

本章将讲述信号完整性相关问题。首先提出什么是高速系统设计中的信号完整性&#xff0c;其次结合影响信号完整性的各种因素&#xff0c;深入讨论在高速系统设计过程中会碰到的几类信号完整性问题&#xff0c;并对每一类问题提出相应的预防措施和解决方案。 需要说明&#xff0…...

Qt开发环境的安装与问题的解决(2)

文章目录 1. Qt开发环境安装的说明2. 通过安装包进行安装3. 通过在线下载程序 解决问题下载 https....网路错误问题解决开始安装--第一部分开始安装--第二部分 4. 建议配置环境变量&#xff08;非必须&#xff09;配置环境变量的意义 简介&#xff1a;这篇文章主要分享Qt开发环…...

STM32 ADC模数转换器

一、ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a;0~3.3V&#x…...

World of Warcraft [CLASSIC] Hunter[Grandel] R12

World of Warcraft [CLASSIC] Hunter[Grandel] R12 R13&#xff0c;[Freeblue] 可惜当时没有截图&#xff0c;唉&#xff0c;没有纪念 --- 挂机脚本...

kalibr:相机模型

文章目录 📚简介Kalibr标定支持的相机模型及适用场景📌 针孔相机模型(Pinhole)🌐 全向相机模型(Omnidirectional)🔍 特殊模型💡 选型建议⚠️ 注意事项📚简介 Kalibr作为多传感器标定的重要工具,支持多种相机模型以适应不同光学特性的视觉传感器。其核心相机…...

【AI News | 20250428】每日AI进展

AI Repos 1、dyad Dyad 是一款免费开源的本地化 AI 应用开发工具&#xff0c;兼容 Windows 和 Mac 双平台。支持使用自有 API 密钥灵活调用主流 AI 模型&#xff08;包括 Gemini、GPT-4.1、Claude 等&#xff09;&#xff0c;内置数据库与身份验证系统可快速构建完整应用。 …...

DNS区域的类型

在BIND9中&#xff0c;type 用于定义DNS区域的类型&#xff0c;不同的类型决定了BIND如何处理该区域的DNS数据。以下是主要的类型及其作用详解&#xff1a; 1. master&#xff08;主区域&#xff09; 作用&#xff1a; 表示该区域是权威DNS服务器的主副本&#xff0c;负责存储…...

​​HTTP vs HTTPS:传输协议的安全演进与核心差异​

HTTP&#xff08;HyperText Transfer Protocol&#xff09;和HTTPS&#xff08;HTTP Secure&#xff09;作为两种最常用的协议&#xff0c;其安全性和实现方式直接关系到用户隐私和数据完整性。 目录 ​​一、HTTP与HTTPS的基础概念​​ ​​二、HTTP与HTTPS的核心差异​​ ​…...

Android平台Unity引擎的Mono JIT机制分析

一、分析背景 Unity引擎开发游戏采用了C#语言,Unity采用了Mono的Jit机制实现C#逻辑代码动态编译和执行,Mono属于开源的工程,可通过查看Mono源码了解其中的处理。本文针对Mono的Jit动态编译和执行的机制进行分析,更好的了解Unity引擎在Android平台所采用的处理方式。 二、M…...

【java】接口

一、定义 1.接口中所有方法都是抽象方法和公共方法&#xff08;可以省略 abstract、public&#xff09;&#xff0c;不可以有正常的方法&#xff0c;所有变量都是全局静态常量 2.能继承接口的只能是接口 3.接口和类的关系通过实现&#xff08;重写&#xff08;实现&#xff09;…...

Vuex(二) —— 用Vuex完成购物车案例

目录 需求需求分析 组件分析组件通信 开发 准备环境准备模块结构商品列表组件 展示商品列表添加购物车 我的购物车组件 购物车列表商品数量和统计功能删除购物车商品 购物车列表组件 购物车列表全选操作数字加减并统计小计删除功能统计总数量和总钱数处理金额小数的问题 本地存…...

数字孪生的浪潮:从虚拟镜像到现实世界的 IT 变革

文章目录 数字孪生的本质&#xff1a;物理与虚拟的实时镜像数字孪生的演进&#xff1a;从工业试验到全行业热潮核心技术&#xff1a;数字孪生的基石与工具链物联网&#xff08;IoT&#xff09;&#xff1a;数据采集云计算与大数据&#xff1a;模型存储AI 与机器学习&#xff1a…...

Web开发之三层架构

实例&#xff1a; 分层解耦 耦合:衡量软件中各个层/各个模块的依赖关联程度。 内聚:软件中各个功能模块内部的功能联系。 软件设计原则:高内聚低耦合 控制反转:Inversion 0f Control&#xff0c;简称IQC。对象的创建控制权由程序自身转移到外部(容器)&#xff0c;这种思想称为…...

社交电商和泛娱乐平台出海南美市场支付方式与策略

随着中国社交电商和泛娱乐平台加速全球化布局,南美市场凭借庞大的人口基数、快速增长的互联网渗透率和活跃的社交媒体使用率,成为出海企业的重要战略要地。然而,这片"新蓝海"的支付生态复杂多元,信用卡欺诈率高企,现金支付仍占主导,不同国家支付偏好差异显著。…...

Miniconda Windows10版本下载和安装

Miniconda Windows10版本下载和安装 步骤1&#xff1a;Miniconda3下载和安装 # 1、下载地址&#xff08;Windows 64位&#xff09; https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe #2、双击进行安装 # 安装注意事项&#xff1a; 1. 安装路径建议&a…...

编译原理:由浅入深从语法树到文法类型

文法与语言基础&#xff1a;从语法树到文法类型 文法&#xff08;Grammar&#xff09;和语言&#xff08;Language&#xff09;是计算机科学和语言学中解析和理解语言结构的核心概念。无论是编程语言的编译器设计&#xff0c;还是自然语言处理&#xff08;NLP&#xff09;中的…...

初识Python

哈哈哈&#xff0c;为了让初学者对python进一步了解&#xff0c;懒惰的博主特地去问了AI&#xff0c;如何更加形象的形容python这一么语言 &#x1f31f; Python 是什么&#xff1f; 想象一下&#xff0c;编程语言是一群性格各异的人&#xff1a; C语言&#xff1a;穿格子衫的…...

C++ —— 正向迭代器与反向迭代器

目录 1. 正向迭代器&#xff08;Forward Iterator&#xff09; 1.1 基本概念 1.2 核心特性 1.3 典型使用 1.4 重要特点 2. 反向迭代器&#xff08;Reverse Iterator&#xff09; 2.1 基本概念 2.2 核心特性 2.3 典型使用 2.4 重要特点 3. 正反迭代器对比 4. 正反迭代…...