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

C++类和对象进阶:初始化列表和static成员深度详解

C++类和对象:初始化列表和static成员深度详解

  • 1. 前言
  • 2. 构造函数初始化成员变量的方式
    • 2.1 构造函数体内赋值
    • 2.2 初始化列表
      • 2.2.1 初始化列表的注意事项
    • 2.3 初始化列表的初始化顺序
  • 3. 类的静态成员
    • 3.1 引入
    • 3.2 静态成员变量
    • 3.3 静态成员函数
    • 3.4 静态成员的注意事项
    • 3.5 静态成员的另一个实践场景
  • 4. 常见问题解答
  • 4. 总结对比

1. 前言

在C++面向对象编程中,构造函数初始化列表和静态成员是提升代码质量与安全性的重要特性。本文深度详解关于C++构造函数的初始化列表C++类中的static成员,其中static成员包含static成员变量static成员函数,以及介绍static的相关实践场景

2. 构造函数初始化成员变量的方式

2.1 构造函数体内赋值

在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。

class Date{
public://赋值方式初始化Date(int year, int month, int day){_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};

我们可以利用以上构造函数,在创建一个对象的时候对该对象进行初始化。

虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化构造函数体中的语句只能将其称为赋初值,,而不能称作初始化。
因为初始化只能初始化一次,而构造函数体内可以多次赋值。

2.2 初始化列表

初始化列表:以一个冒号开始,接着是一个**以逗号分隔的数据成员列表**, 每个"成员变量"后面跟一个放在括号中的初始值或表达式

例如:

class Date{
public://初始化列表初始化Date(int year, int month, int day): _year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
};
int main(){Date d1(2025, 2, 18);//传入的参数会通过初始化列表的方式进行初始化。return 0;
}

2.2.1 初始化列表的注意事项

首先回顾一下往期文章提出的对默认构造函数的理解:
C++类和对象进阶:构造函数和析构函数详解

默认构造函数,以下三种函数都可以被称作是默认构造函数。

  1. 无参构造函数。
  2. 全缺省构造函数。
  3. 我们没写编译器默认生成的构造函数
  • 总结来说就是,不需要传参的构造函数,都属于是默认构造函数
  1. 无参构造函数。没有参数,因此无需传参。
  2. 全缺省构造函数。参数全缺省,不需要传参。
  3. 我们没写编译器默认生成的构造函数。编译器生成的,我们无法显示调用。自动调用时无需传参。

注意

  1. 要把初始化列表理解成非静态成员变量创建(占内存)的地方。类中只是成员变量的声明
  2. 无论是否显式指定初始化列表,都会走一遍初始化列表来对成员变量进行初始化。
    (静态成员变量在类外进行初始化)
  1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
  2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
    • 引用成员变量
    • const成员变量
    • 自定义类型成员(且该类没有默认构造函数时)

分析这三类变量的特征:

  • 引用成员变量:引用成员变量的初始化是“绑定”过程,而非赋值操作。构造函数体内无法完成初始化(此时成员已定义,只能赋值),因此必须在初始化列表(引用变量创建时)初始化
  • const成员变量const成员变量的初始化是“定义时赋值”,构造函数体内无法修改其值。const变量在定义后其值不可修改,因此必须在创建时初始化,也就是必须在初始化列表初始化
  • 自定义类型成员(该类没有默认构造函数时):编译器只会调用默认构造函数,若类没有默认构造函数(即无参构造函数或所有参数均有默认值的构造函数或编译器自己生成的构造函数),也就说程序员自己写了构造函数且调用时需要显式传参,则必须显式调用其某个构造函数,该工作在初始化列表中进行。

对比以上三类特殊情形:

变量类型核心特征初始化方式未正确初始化的后果
引用成员变量必须绑定对象,不可重新绑定初始化列表中绑定编译错误(未初始化引用)
const成员变量不可修改,需定义时赋值初始化列表中赋值编译错误(未初始化常量)
自定义类型成员(无默认构造函数)必须显式调用构造函数初始化列表中调用带参构造函数编译错误(找不到默认构造函数)

2.3 初始化列表的初始化顺序

成员变量在类中声明次序就是其在初始化列表中的初始化顺序与其在初始化列表中的先后次序无关

我们来看如下代码:

class MyClass {
public:MyClass(int init_value): _value1(init_value)   // 类中的声明顺序决定初始化顺序, _value2(_value1)  // _value2先声明,会先用 _value1 初始化 _value2// 此时 _value1 还未完成初始化,是随机值{}void Print() const {cout << "_value1: " << _value1<< "  _value2: " << _value2 << endl;}
private:int _value2;     int _value1;
};
int main() {MyClass obj(5);obj.Print();  // 输出:_value1: 5  _value2: 随机值return 0;
}

在这里插入图片描述

结论:

  • 初始化列表中,变量初始化的顺序应该和变量在类中声明的次序保持一致
  • 尽量使用初始化列表对成员变量进行初始化,因为不管程序员是否使用初始化列表,对于自定义类型成员变量,一定会先试用初始化列表初始化。
  • 不能在初始化列表中完成的,在函数体内用语句来完成(如开辟空间后对指针的检查等)

初始化列表总结:

  • ⽆论是否显式写初始化列表,每个构造函数都有初始化列表
  • ⽆论是否在初始化列表显式初始化成员变量,每个成员变量都要⾛初始化列表初始化
    在这里插入图片描述

3. 类的静态成员

3.1 引入

设计一个类,计算程序中创建了多少个该类的类对象

#include <iostream>
//设计一个程序,统计当前正在使用的某个对象有多少个
int _scount = 0;	//我们可以利用全局变量class A {
public:A() { ++_scount; }	//构造函数A(const A& t) { ++_scount; }	//拷贝构造函数~A() { --_scount; }		//析构函数
};
int main() {cout << __LINE__ << ": " << _scount << endl;	// 是 1 ,此处还没进入Func函数,static 对象还没创建A aa1;Func();	//3Func(); //3return 0;
}

在这里插入图片描述
以上程序确实可以实现统计,但全局变量有极大的缺陷:

void Func() {static A aa2;	//局部静态对象,只会创建一次,不在函数栈帧内,在静态区cout << __LINE__ << ": " << _scount << endl;	//3//全局变量的劣势:任何地方都可以随意改变,不安全//_scount++;
}

因此,我们想到了利用类来对计数器进行封装,并将计数器设置成静态成员变量。

什么是静态成员?

  • 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量
  • static修饰的成员函数,称之为静态成员函数静态成员变量一定要在类外进行初始化。

利用静态成员实现的类:

class A {
public:A(){ ++_scount;}A(const A& t) { ++_scount; }~A() { --_scount; }
private:static int _scount;		//此处只是该成员变量的声明//类内的静态成员,相当于用类去封装全局变量
};
//全局位置,类外定义   类的 static 成员,类内声明,类外初始化  static 成员定义时不受访问限定符的限制
int A::_scount = 0;
  • 需要尤其注意,静态成员变量,在类内是声明,需要在类外进行初始化:int A::_scount = 0;这是规定的写法,通过类作用域限定符来访问

3.2 静态成员变量

private:// 非静态成员变量 ----- 属于每一个类对象, 存储在对象里面int _a1 = 1;	//成员变量给缺省值,会自动进入初始化列表int _a2 = 2;// 静态成员变量 ----- 属于类,类的每个对象共享,存储在静态区, 生命周期是全局的,不能用初始化列表初始化static int _scount;
};

需要注意:静态成员变量和非静态成员变量存储的位置不同。

  • 静态成员变量:属于类内,类的每个对象共享,存储在静态区, 生命周期是全局的,程序运行期间持续存在,不能用初始化列表初始化。
  • 非静态成员变量: 属于每一个类对象, 存储在对象里面

3.3 静态成员函数

静态成员函数一般是和静态成员变量成对出现的。
我们在类中添加以下函数方便我们获取_scount的值

public:
static int GetACount() {return _scount;
}

静态成员函数的特点:

  • 没有this指针
  • 指定类域和访问限定符就可以访问
  • 可以直接访问类内的静态成员变量

通过指定类域和访问限定符访问静态成员函数。

int main(){//由于静态成员变量是私有的//可以通过静态成员函数来访问静态成员变量cout << A::GetACount() << endl;return 0;
}

因此我们可以得出:

  1. 静态成员函数,不能访问类内的非静态成员变量,因为没有this指针(没有传入调用对象的地址)
  2. 静态成员函数不能调用非静态成员函数,非静态成员函数的调用需要传递this指针,但static成员函数没有this指针

3.4 静态成员的注意事项

  1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明。类内声明,类外初始化
  3. 类静态成员(成员变量和成员函数)可用 类名::静态成员 或者 对象.静态成员 来访问
  4. 静态成员函数没有隐藏的this指针,不能用const修饰不能访问任何非静态成员
  5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制
  6. 静态成员变量:不能是auto推导类型。

在这里插入图片描述

  • 核心特点
    • 静态成员函数无this指针,无法访问非静态成员
    • 静态成员函数可直接调用无需实例化

3.5 静态成员的另一个实践场景

静态成员函数的妙用
设计一个类,在类外只能在 栈 上创建对象
设计一个类,在类外只能在 堆 上创建对象

我们可以这样做

class Obj {
public://通过类作用域限定符来调用函数获取对象static Obj GetStackObj() {Obj obj;return obj;}static Obj* GetHeapObj() {Obj* obj = new Obj;return obj;}//构造函数私有化,防止直接调用构造函数在栈或堆上创建对象。
private:Obj(){}
private:int _a1 = 1;int _a2 = 2;
};
int main() {//这三种方式都会调用构造函数,我们将构造函数私有化后,就无法再类外创建 堆/栈 上的对象了/*static OBj o1;OBj o2;Obj* o3 = new Obj;*///提供对外的接口//无需创建对象,通过类作用域限定符来调用静态成员函数。Obj obj_1 = Obj::GetStackObj();Obj* p_obj = Obj::GetHeapObj();return 0;
}
  • 实现原理
    1. 私有化构造函数
    2. 通过静态工厂方法控制对象创建

4. 常见问题解答

Q1:为什么静态成员变量必须类外初始化?

  • 静态成员不属于单个对象,类内声明仅表示存在性,需在程序全局空间进行内存分配

Q2:静态成员函数能否调用非静态成员函数?

  • 不能。非静态成员函数隐含this指针参数,而静态函数无this指针

Q3:如何选择初始化列表与构造函数体?

  • 优先使用初始化列表,特别是对于const/引用成员/无默认构造函数的自定义类型等必须初始化的场景

4. 总结对比

特性初始化列表静态成员
作用对象对象成员初始化类级别共享数据/操作
关键优势处理特殊类型成员初始化减少全局变量使用
典型应用场景const/引用成员初始化计数器、工具类函数
内存管理对象内存空间静态存储区

以上就是本文的所有内容了,码字整理不易,欢迎各位大佬在评论区留言交流

相关文章:

C++类和对象进阶:初始化列表和static成员深度详解

C类和对象&#xff1a;初始化列表和static成员深度详解 1. 前言2. 构造函数初始化成员变量的方式2.1 构造函数体内赋值2.2 初始化列表2.2.1 初始化列表的注意事项 2.3 初始化列表的初始化顺序 3. 类的静态成员3.1 引入3.2 静态成员变量3.3 静态成员函数3.4 静态成员的注意事项3…...

[C#]C# winform部署yolov12目标检测的onnx模型

yolov12官方框架&#xff1a;github.com/sunsmarterjie/yolov12 【测试环境】 vs2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.3 【效果展示】 【调用代码】 using System; using System.Collections.Generic; using System.ComponentModel; using System.…...

阿里云k8s服务部署操作一指禅

文章目录 DockerFile镜像操作阿里云k8s服务部署 DockerFile # 使用 JDK 17 官方镜像 # linux架构&#xff1a;FROM --platformlinux/amd64 openjdk:17-jdk-slim # arm架构&#xff1a;openjdk:17-jdk-slim FROM --platformlinux/amd64 openjdk:17-jdk-slim# 设置工作目录 WORK…...

Transformer LLaMA

一、Transformer Transformer&#xff1a;一种基于自注意力机制的神经网络结构&#xff0c;通过并行计算和多层特征抽取&#xff0c;有效解决了长序列依赖问题&#xff0c;实现了在自然语言处理等领域的突破。 Transformer 架构摆脱了RNNs&#xff0c;完全依靠 Attention的优…...

球队训练信息管理系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装球队训练信息管理系统软件来发挥其高效地信息处理的作用&a…...

【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较

常见中间件api操作及性能比较 ☝️ MySQL crud操作✌️ maven依赖✌️ 配置✌️ 定义实体类✌️ 常用api ☝️ Redis crud操作✌️ maven依赖✌️ 配置✌️ 常用api ☝️ MongoDB crud操作✌️ maven依赖✌️ 配置文件✌️ 定义实体类✌️ MongoDB常用api ☝️ ES crud操作 ⭐️…...

UE_C++ —— Gameplay Classes

目录 一&#xff0c;Adding Classes 二&#xff0c;Class Headers Class Declaration Class Specifiers Metadata Specifiers 三&#xff0c;Class Implementation Class Constructor 引擎中每个游戏类都由一个类头文件&#xff08;.h&#xff09;和一个类源文件&#x…...

windows上vscode cmake工程搭建

安装vscode插件&#xff1a; 1.按装fastc&#xff08;主要是安装MinGW\mingw64比较方便&#xff09; 2.安装C&#xff0c;cmake&#xff0c;cmake tools插件 3.准备工作完成之后&#xff0c;按F1&#xff0c;选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…...

软件测试:1、单元测试

1. 单元测试的基本概念 单元&#xff08;Unit&#xff09;&#xff1a;软件系统的基本组成单位&#xff0c;可以是函数、模块、方法或类。 单元测试&#xff08;Unit Testing&#xff09;&#xff1a;对软件单元进行的测试&#xff0c;验证代码的正确性、规范性、安全性和性能…...

如果后台的Long类型的数据返回是null,那么Android客户端的数据bean的kotlin的Long类型的字段接受到数据后是null空指针吗?

如果后台的Long类型的数据返回是null&#xff0c;那么Android客户端的数据bean的kotlin的Long类型的字段接受到数据后是null空指针吗&#xff1f; DeepSeek R1 思考 35 秒 思考过程 好的&#xff0c;用户的问题是关于在Android客户端使用Kotlin处理后台返回的Long类型数据为n…...

Vue3 打造 Windows 桌面个性高效组件工具

软件介绍 Widgets 这款基于 Vue3 构建的开源 Windows 桌面小部件工具超实用。 其多样化组件库涵盖超 20 种&#xff0c;从倒计时、打工进度等实用工具&#xff0c;到抖音热榜等实时资讯组件应有尽有&#xff0c;各组件独立运行&#xff0c;满足多场景需求。 高度自定义布局支持…...

学习笔记-沁恒第四讲-米醋

一&#xff0c; 语音模块&#xff1a;数据包发送 刷卡模块&#xff1a;数据包接收 AS608&#xff1a;数据包发送接收 二&#xff0c;第三讲文件夹改成第四讲&#xff0c;工程也改成第四讲 三&#xff0c;目前在内存里面。保存新值&#xff0c;掉电会丢失 u8 password[6]{1,…...

epoll_event的概念和使用案例

epoll_event 是 Linux 下 epoll I/O 多路复用机制的核心数据结构&#xff0c;用于描述文件描述符&#xff08;File Descriptor, FD&#xff09;上发生的事件及其关联的用户数据。通过 epoll&#xff0c;可以高效地监控多个文件描述符的状态变化&#xff08;如可读、可写、错误等…...

容器和虚拟机选择对比

1. 概述 如果主要需求是学习和测试 Ubuntu 下的命令行工具或服务型应用&#xff0c;推荐使用 Docker Docker 更轻量、更高效&#xff0c;适合快速搭建和销毁环境。 启用 WSL 2&#xff0c;Docker Desktop 是一个非常好的选择。 如果需要完整的桌面环境或进行复杂的系统级开…...

C++17中std::chrono::duration和std::chrono::time_point的舍入函数

文章目录 1. std::chrono::duration的舍入函数1.1 floor1.2 ceil1.3 round 2. std::chrono::time_point的舍入函数2.1 示例 3. 舍入函数的应用场景3.1 时间测量3.2 数据记录3.3 时间同步 4. 总结 在C17中&#xff0c; std::chrono库提供了一组强大的时间处理工具&#xff0c;包…...

基于SpringBoot的线上汽车租赁系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

基于Dancing Links的精确覆盖算法(解决NP难问题)和量子计算机模拟中的Shor算法(涉及数论与量子叠加态模拟)

一、Dancing Links算法实现数独求解(NP难问题) 算法方案 数独可转化为精确覆盖问题,使用Knuth提出的DLX算法实现高效求解。该算法通过双向十字循环链表实现快速回溯,时间复杂度可达O(n^k)(k为常数) #include <iostream> #include <vector> #include <c…...

体育品牌排行榜前十名:MLB·棒球1号位

MLB是一个融合了棒球文化与街头时尚元素的潮流运动品牌。以下是对该品牌的详细介绍&#xff1a; 一、品牌背景 • 全称&#xff1a;MLB全称是Major League Baseball&#xff0c;即美国职业棒球大联盟。不过&#xff0c;作为品牌的MLB并非由美国职业棒球大联盟直接运营&#x…...

Java网络编程封装

系列文章目录 Java知识点 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、封装的目标&#x1f449;二、套接字层封装&#x1f449;壁纸分享&#x1f449;总结 &#x1f449;前言 Java 网络编程封装原理主要围绕着将底层的网络通信细节隐藏起来&#xff0c;提供简洁…...

数字内容体验标杆案例解析

内容概要 在数字化转型浪潮中&#xff0c;数字内容体验正成为企业构建核心竞争力的关键抓手。本文通过拆解金融、零售、文旅等领域的标杆案例&#xff0c;系统分析沉浸式设计与智能交互系统的技术融合路径&#xff0c;揭示头部企业如何通过XR技术、实时数据可视化及场景化内容…...

区块链相关方法-PEST分析

一、定义:一种用于分析企业外部宏观环境的工具。PEST 这四个字母分别代表政治&#xff08;Political&#xff09;、经济&#xff08;Economic&#xff09;、社会&#xff08;Social&#xff09;和技术&#xff08;Technological&#xff09;。这种分析方法帮助企业或组织了解宏…...

Dify安装教程:Linux系统本地化安装部署Dify详细教程

1. 本地部署 Dify 应用开发平台 环境:Ubuntu(24.10) docker-ce docker compose 安装 克隆 Dify 源代码至本地环境: git clone https://github.com/langgenius/dify.git 启动 Dify: cd dify/docker cp .env.example...

git使用-克隆远程项目、分支管理

文章目录 克隆远程项目到本地1. 远程找到需要克隆的项目&#xff0c;复制ssh地址2. idea开启git版本控制&#xff08;如果已经开了&#xff0c;忽略此步骤&#xff09;3. clone远端项目4. 克隆完成 分支管理1. 新建分支2. 切换分支3. 合并分支4. 储存变化 克隆远程项目到本地 …...

QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,压缩进度

前言 最近在做项目时遇到一个需求&#xff0c;需要将升级的文件压缩成zip&#xff0c;再进行传输&#xff1b; 通过网络调研&#xff0c;有许多方式可以实现&#xff0c;例如QT私有模块的ZipReader、QZipWriter&#xff1b;或者第三方库zlib或者libzip或者quazip等&#xff1…...

SQLMesh 系列教程8- 详解 seed 模型

在数据分析和建模过程中&#xff0c;外部模型&#xff08;External Models&#xff09;在 SQLMesh 中扮演着重要角色。外部模型允许用户引用外部数据源或现有数据库表&#xff0c;从而实现灵活的数据整合和分析。本文将介绍外部模型的定义、生成方法&#xff08;包括使用 CLI 和…...

oracle apex post接口

日常记录 使用到了apex_json方式接收 、、、1 首先&#xff0c;接口通过body传递过来&#xff0c;成功接收到&#xff0c; 数据格式为 JSON_OBJECT_T l_json : JSON_OBJECT_T.parse(:body); 这里我用参数接收到 然后 里面是包含了 "data" 我用 继续接收到这个 l…...

复制所绑定元素文本的vue自定义指令

最近写了一个复制所绑定元素文本的vue自定义指令&#xff0c;给大家分享一下。 import { ElMessage } from element-plus// data-* 属性名 const dataCopyBtnTextAttribute data-copy-btn-text // 复制按钮的class&#xff0c;结合项目实际进行设置 const copyBtnClass icon…...

若依-@Excel新增注解numberFormat

Excel注解中原本的scale会四舍五入小数&#xff0c;导致进度丢失 想要的效果 显示的时候保留两个小数真正的数值是保留之前的数值 还原过程 若以中有一個專門的工具类&#xff0c;用来处理excel的 找到EXCEL导出方法exportExcel()找到writeSheet,写表格的方法找到填充数据的方法…...

内容中台重构智能服务:人工智能技术驱动精准决策

内容概要 现代企业数字化转型进程中&#xff0c;内容中台与人工智能技术的深度融合正在重构智能服务的基础架构。通过整合自然语言处理、知识图谱构建与深度学习算法三大技术模块&#xff0c;该架构实现了从数据采集到决策输出的全链路智能化。在数据层&#xff0c;系统可对接…...

网络安全:DeepSeek已经在自动的挖掘漏洞

大家好,我是AI拉呱,一个专注于人工智领域与网络安全方面的博主,现任资深算法研究员一职,兼职硕士研究生导师;热爱机器学习和深度学习算法应用,深耕大语言模型微调、量化、私域部署。曾获多次获得AI竞赛大奖,拥有多项发明专利和学术论文。对于AI算法有自己独特见解和经验…...

C#从入门到精通(34)—如何防止winform程序被同时打开多次

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发上位机软件的过程中&#xff0c;评判一个人软件写的好不好&#xff0c;有一…...

Linux系统使用Docker部署Geoserver并做数据挂载进行地图服务的发布和游览

文章目录 1、前提环境2、拉取geoserver镜像3、创建数据挂载目录4、 运行容器5、 测试使用&#xff08;发布shp数据为服务&#xff09;5.1、创建工作区5.2、添加数据存储5.3、发布图层5.4、服务游览 1、前提环境 部署环境&#xff1a;Linux&#xff0c;Centos7 &#xff0c;Doc…...

STM32-温湿度上传OneNET项目

一、项目需求 使用 ESP8266 连接 OneNET 云平台&#xff0c;并通过 MQTT 协议上传 DHT11 获取的温湿度值。 二、项目框图 三、DHT11工作原理 参考于良许嵌入式手把手教你玩转DHT11&#xff08;原理驱动&#xff09; | 良许嵌入式 3.1 正常工作验证 #​ 上电后&#xff…...

HTML 中的 Canvas 样式设置全解

在 HTML5 中&#xff0c;<canvas> 元素提供了一个强大的绘图接口&#xff0c;允许开发者通过 JavaScript 实现各种图形和动画效果。为了充分利用 <canvas> 的功能&#xff0c;理解其样式设置是至关重要的。本文将详细介绍如何在 HTML 中设置 <canvas> 的各种…...

【Java】File 类

目录 File 类File 类构造方法常见成员方法判断与获取创建与删除获取并遍历 File 类 File 对象表示一个路径&#xff0c;可以是文件的路径&#xff0c;也可以是文件夹的路径 这个路径可以是存在的&#xff0c;也允许是不存在的 绝对路径和相对路径的区别&#xff1a; 绝对路径…...

SAP S4HANA Administration (Mark Mergaerts Bert Vanstechelman)

SAP S4HANA Administration (Mark Mergaerts Bert Vanstechelman)...

特征提取:如何从不同模态中获取有效信息?

在多模态学习中,特征提取是一个至关重要的过程。它是将原始数据(如文本、图像、视频和语音等)转化为机器能够理解和处理的特征的核心步骤。不同于传统的单一模态任务,在多模态学习中,如何有效地从每种模态中提取出有意义的信息并进行融合,直接影响到最终模型的性能和准确…...

2025年-G14-Lc88-278.第一个坏版本 -java版

1.题目描述 第一个坏版本 你是一名产品经理&#xff0c;目前领导一个团队开发新产品。不幸的是&#xff0c;你产品的最新版本未通过质量检查。由于每个版本都是基于前一个版本开发的&#xff0c;所以坏版本之后的所有版本也都是坏的。假设你有 n 个版本 [1, 2, …, n]&#xff…...

计算机网络————(一)HTTP讲解

基础内容分类 从TCP/IP协议栈为依托&#xff0c;由上至下、从应用层到基础设施介绍协议。 1.应用层&#xff1a; HTTP/1.1 Websocket HTTP/2.0 2.应用层的安全基础设施 LTS/SSL 3.传输层 TCP 4.网络层及数据链路层 IP层和以太网 HTTP协议 网络页面形成基本 流程&#xff1a…...

大语言模型架构:从基础到进阶,如何理解和演变

引言 你可能听说过像 ChatGPT 这样的 AI 模型&#xff0c;它们能够理解并生成自然语言文本。这些模型的背后有着复杂的架构和技术&#xff0c;但如果你了解这些架构&#xff0c;就能明白它们是如何工作的。今天&#xff0c;我们将用简单的语言&#xff0c;逐步介绍大语言模型的…...

科普mfc100.dll丢失怎么办?有没有简单的方法修复mfc100.dll文件

当电脑频繁弹窗提示“mfc100.dll丢失”或应用程序突然闪退时&#xff0c;这个看似普通的系统文件已成为影响用户体验的核心痛点。作为微软基础类库&#xff08;MFC&#xff09;的核心组件&#xff0c;mfc100.dll直接关联着Visual Studio 2010开发的大量软件运行命脉。从工业设计…...

什么是虚拟内存?它的作用是什么?

虚拟内存概念 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存&#xff08;一个连续完整的地址空间&#xff09;。但是实际上&#xff0c;它通常是被分隔成多个物理内存碎片&#xff0c;还有部分暂时存储在外部磁盘存储器上&#xff0c;在…...

SAP任命Simon Davies为亚太区总裁,领导重组后的亚太地区业务

2025年2月19日&#xff0c;SAP宣布任命Simon Davies为新任亚太区总裁&#xff0c;负责领导公司重组后的亚太地区业务。Davies将常驻新加坡&#xff0c;全面负责SAP在亚太地区的战略、运营、人员管理、销售、服务、合作伙伴关系及盈利能力。他的职责范围涵盖韩国、澳大利亚、新西…...

Markdown使用方法文字版解读

[TOC](这里写自定义目录标题) # Markdown编辑器 你好&#xff01; 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 ## 新的改变 我们对Markdown编辑器进行了…...

QT移植,交叉编译至泰山派RK3566开发板,.pro文件解析

备注 交叉编译到开发板,会有各种奇奇怪怪的问题, 直接命令行安装 QTCREATOR和 QtBase,就在板子上搞个桌面系统编译,最后把桌面关掉。 配置文件解析 配置文件丢这里,后面有空整理下。 说下大概的注意点, 安装路径(qtcreator远程部署的路径)、 动态库路径和…...

Liunx(CentOS-6-x86_64)系统安装MySql(5.6.50)

一&#xff1a;安装Liunx&#xff08;CentOS-6-x86_64&#xff09; 安装Liunx&#xff08;CentOS-6-x86_64&#xff09; 二&#xff1a;下载MySql&#xff08;5.6.50&#xff09; MySql下载官网 二&#xff1a;安装MySql 2.1 将mysql上传到Liunx 文件地址 /usr/local/ 2…...

使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应

使用 deepseek实现 go语言&#xff0c;读取文本文件的功能&#xff0c;要求支持 ascii&#xff0c;utf-8 等多种格式自适应我要用 chatgpt&#xff0c;也问过&#xff0c;但是比 deepseek 还是差一个级别&#xff0c;具体如下&#xff1a; package mainimport ("bufio&qu…...

当电脑上有几个python版本Vscode选择特定版本python

查看当前vscode用的python版本命令 Import sys print(sys.version) 修改VSCODE解释器 打开 VSCode。 按下 CtrlShiftP打开命令面板。 输入 Python: Select Interpreter 并选择它。 从弹出的列表中选择你安装的 Python 解释器。如果你有多个 Python 版本&#xff08;例如…...

大一计算机的自学总结:一维差分与等差数列差分

前言 差分和前缀和一样&#xff0c;也是很重要的基础算法。 一、一维差分 1.内容 当给出一个数组&#xff0c;每次操作让数组某个区间上的值全增加&#xff0c;最后要求返回整个数组的结果。若是一次一次去遍历&#xff0c;时间复杂度肯定很难看。差分可以做到在时间复杂度…...

学习dify第一天:整体架构分析

使用marscode AI插件 从分析最火的dify开始学习使用ai提速首先安装插件功能快捷键使用这个工具如何学习项目首先学习dify那就先上官网看文档开始从docker构建脚本学起看下docker-compose.yamldify里边服务的组件现在看api和web模块api项目根目录有Makefile文件,用于构建api和w…...