C++入门基础
文章目录
- C++核心特性详解(基础增强版)
- 一、第一个C++程序:Hello World
- 完整代码解析
- 新手常见问题
- 二、命名空间(详解版)
- 1. 为什么需要命名空间?
- 2. 命名空间使用场景
- 3. 嵌套命名空间
- 4. 匿名命名空间
- 三、输入输出系统(深度解析)
- 1. 输入输出对比
- 2. 格式化输出
- 3. 输入注意事项
- 四、函数重载(原理剖析)
- 1. 重载条件深度解析
- 2. 底层实现原理
- 五、缺省参数(陷阱解析)
- 1. 使用规范示例
- 2. 声明定义分离规范
- 3. 常见陷阱
- 六、引用机制(深入理解)
- 1. 引用本质
- 2. 引用使用场景
- 3. 权限问题详解
- 七、内联函数(实现原理)
- 1. 编译器处理逻辑
- 2. 查看展开效果(GCC)
- 3. 使用限制
- 八、符号表与链接错误
- 1. 多文件编译流程
- 2. 典型错误分析
- 九、nullptr(深度解析)
- 1. NULL的局限性
- 2. nullptr特性
- 十、最佳实践指南
- 1. 命名空间使用建议
- 2. 函数设计原则
- 3. 指针/引用选择
- 补充说明
- 结语
C++核心特性详解(基础增强版)
一、第一个C++程序:Hello World
完整代码解析
// 包含标准输入输出流头文件
#include <iostream>// 主函数:程序入口
int main()
{// std::cout 标准输出流对象// << 流插入运算符(将右侧内容输出到左侧流)// std::endl 换行并刷新缓冲区std::cout << "Hello World!" << std::endl;// 返回0表示程序正常退出return 0;
}
新手常见问题
-
为什么用
std::cout
不用printf
?- 类型安全:自动识别变量类型
- 扩展性好:支持自定义类型输出
- 代码可读性:
<<
运算符链式调用更直观
-
std::endl
和\n
的区别?\n
:仅换行std::endl
:换行+立即刷新输出缓冲区
二、命名空间(详解版)
1. 为什么需要命名空间?
经典冲突案例:
// math.h
int abs(int val) { return val>0?val:-val; }// main.cpp
#include <math.h>
#include <stdlib.h> // 包含标准库的abs()int main() {printf("%d", abs(-5)); // 编译错误:函数重定义return 0;
}
2. 命名空间使用场景
namespace MySpace {int version = 1;void Print() { /*...*/ }class Data { /*...*/ };
}// 使用场景1:明确指定
MySpace::Print();// 使用场景2:局部展开
using MySpace::version;
cout << version;// 使用场景3:全局展开(慎用!)
using namespace MySpace;
3. 嵌套命名空间
namespace Parent {int x = 10;namespace Child {int y = 20;}
}// 访问方式
cout << Parent::Child::y; // 输出20
4. 匿名命名空间
namespace {int count = 0; // 仅当前文件可见
}
三、输入输出系统(深度解析)
1. 输入输出对比
特性 | C (printf/scanf ) | C++ (cin/cout ) |
---|---|---|
类型安全 | 需要格式说明符 | 自动类型推导 |
扩展性 | 不支持自定义类型 | 支持运算符重载扩展 |
错误处理 | 无编译时检查 | 流状态检测 |
函数参数 | 可变参数列表 | 运算符链式调用 |
2. 格式化输出
#include <iomanip> // 需要包含此头文件cout << fixed << setprecision(2) << 3.14159; // 输出3.14
cout << hex << 255; // 输出ff
3. 输入注意事项
int age;
double salary;// 正确写法:连续输入
cin >> age >> salary;// 错误处理示例
if (!(cin >> age)) {cout << "输入错误!";cin.clear(); // 清除错误状态cin.ignore(1024, '\n'); // 清空缓冲区
}
四、函数重载(原理剖析)
1. 重载条件深度解析
// 合法重载
void func(int a) {} // 类型不同
void func(double a) {}void func(int a, int b) {} // 参数个数不同void func(int a, char b) {} // 参数顺序不同
void func(char a, int b) {}// 非法重载
int func(int a) {} // 仅返回类型不同 ❌
void func(const int a) {} // const修饰值参数 ❌
2. 底层实现原理
编译器通过**名称修饰(Name Mangling)**生成唯一符号:
void func(int)
→_Z4funci
void func(double)
→_Z4funcPd
查看方法(Linux):
g++ -c test.cpp
nm test.o
五、缺省参数(陷阱解析)
1. 使用规范示例
// 正确:全缺省
void Connect(string ip = "127.0.0.1", int port = 3306) {}// 正确:半缺省(必须从右往左)
void Print(int a, int b = 10, int c = 20) {}// 错误示例
void Error1(int a = 10, int b) {} // 非连续缺省 ❌
void Error2(int a, int b = 10, int c) {} // 中间参数缺省 ❌
2. 声明定义分离规范
// test.h
void Init(int timeout = 1000); // 声明处给缺省值// test.cpp
void Init(int timeout) { /*...*/ } // 定义处不能重复给
3. 常见陷阱
void func(int a, int b = 10) {}
func(,20); // 错误!必须从左向右传参 ❌
六、引用机制(深入理解)
1. 引用本质
int a = 10;
int& ra = a; // 底层实现等效于:
int* const ra = &a; // 常指针(指向不可变)
*ra = 20; // 解引用操作
2. 引用使用场景
场景1:函数参数传递
void Swap(int& x, int& y) {int tmp = x;x = y;y = tmp;
}
场景2:函数返回值
int& GetElement(int* arr, int index) {return arr[index];
}
3. 权限问题详解
// 示例1:权限放大
const int a = 10;
int& ra = a; // 错误!ra可能修改a ❌// 示例2:权限缩小
int b = 20;
const int& rb = b; // 合法 ✅// 示例3:临时对象
int c = 10;
double& rd = c; // 错误!类型转换产生临时对象 ❌
const double& rd = c; // 正确 ✅
七、内联函数(实现原理)
1. 编译器处理逻辑
inline int Add(int x, int y) {return x + y;
}int main() {int ret = Add(1,2);// 可能被展开为:// int ret = 1 + 2;return 0;
}
2. 查看展开效果(GCC)
g++ -S test.cpp -o test.s
汇编文件内容:
main:movl $3, -4(%rbp) // 直接计算结果
3. 使用限制
情况 | 是否支持内联 |
---|---|
递归函数 | 否 |
函数体超过10行 | 由编译器决定 |
虚函数 | 否 |
八、符号表与链接错误
1. 多文件编译流程
.cpp文件 → 编译器 → 目标文件(.o) → 链接器 → 可执行文件(符号表) (符号解析)
2. 典型错误分析
错误现象:
重复定义`void Print()`
错误原因:
// utils.h
void Print() { /*...*/ } // 被多个cpp文件包含导致多份定义
解决方案:
// utils.h
inline void Print() { /*...*/ } // 方案1:使用inline// 或
// utils.h
void Print(); // 声明// utils.cpp
void Print() { /*...*/ } // 定义
九、nullptr(深度解析)
1. NULL的局限性
void func(int) {}
void func(int*) {}func(NULL); // 调用func(int) ❌
func(nullptr); // 正确调用func(int*) ✅
2. nullptr特性
// 类型检测
cout << typeid(nullptr).name(); // 输出Dn (表示decltype(nullptr))
cout << typeid(NULL).name(); // 输出l (表示long)// 安全转换
int* p1 = nullptr; // ✅
int* p2 = NULL; // ✅(C++11前可能警告)
int num = nullptr; // ❌ 类型不匹配
十、最佳实践指南
1. 命名空间使用建议
- 项目开发:始终使用
命名空间::成员
形式 - 小型测试:可
using namespace 命名空间
- 禁止:在头文件中使用全局using指令
2. 函数设计原则
- 优先使用引用传参(避免拷贝)
- 参数超过3个考虑结构体封装
- 超过50行代码的函数避免使用inline
3. 指针/引用选择
场景 | 推荐使用 |
---|---|
需要指向不同对象 | 指针 |
函数参数传递 | const引用 |
返回值需要空值 | 指针 |
实现多态 | 指针/引用 |
补充说明
各种报错分析
1.全局函数(声明和定义在一块)被多个.c/.cpp文件展开,报错类型重定义函数,因为这样会导致函数多个进入符号表(粗暴认为符号表内存有的是函数名及其函数地址)内导致重定义
2.解决方法:1.定义和声明分离,由于分.h文件和.c/.cpp文件此时不会进入符号表,之后进行链接操作根据函数名及其地址找到.c/.cpp文件中的定义链接一块即可 2.将函数处理为static放入代码段(常量区),这样就不会进入符号表就算多个.h文件包含也不会因为在符号表内重定义
2.内联函数定义和声明分离和未分离相关讨论
分离:这时候由于内联函数也不会进入符号表因为内联函数使用时是要展开的,这样就没必要进入符号表存入函数名和地址了,但是此时.c/,cpp文件调用这个函数链接时内联展开只有函数声明没有定义这时候导致链接错误
未分离:这样不会出现以上描述情况因为声明和定义未分离可以正常链接
结语
通过这份增强版教程,我们系统性地梳理了C++核心特性,从最基础的Hello World程序到复杂的引用机制,每个知识点都配有详细的代码示例和原理剖析。建议学习时:
- 按照章节顺序逐步实践
- 重点理解各特性的设计初衷
- 通过修改示例代码观察不同表现
- 遇到问题优先查看编译器错误提示
C++的学习曲线虽然陡峭,但掌握这些基础后,后续面向对象、模板等高级特性将会更加得心应手。保持编码实践,持续积累经验!
相关文章:
C++入门基础
文章目录 C核心特性详解(基础增强版)一、第一个C程序:Hello World完整代码解析新手常见问题 二、命名空间(详解版)1. 为什么需要命名空间?2. 命名空间使用场景3. 嵌套命名空间4. 匿名命名空间 三、输入输出…...
《大语言模型的原理发展与应用》:此文为AI自动生成
《大语言模型的原理发展与应用》:此文为AI自动生成 一、引言:大语言模型,AI 时代的 “新引擎” 在当今数字化浪潮中,大语言模型宛如一颗璀璨的明星,照亮了人工智能发展的道路,成为推动各领域变革的核心驱…...
SpringCloud系列教程(十三):Sentinel流量控制
SpringCloud中的注册、发现、网关、服务调用都已经完成了,现在就剩下最后一部分,就是关于网络控制。SpringCloud Alibaba这一套中间件做的非常好,把平时常用的功能都集成进来了,而且非常简单高效。我们下一步就完成最后一块拼图Se…...
[MySQL初阶]MySQL(4)基本查询
标题:[MySQL初阶]MySQL(4)基本查询 水墨不写bug 文章目录 一. 数据表设计二、对数据表的操作1. Create 操作(插入数据)查看最近受影响的行数: 2. Retrieve 操作(读取数据)࿰…...
使用Open WebUI下载的模型文件(Model)默认存放在哪里?
🏡作者主页:点击! 🤖Ollama部署LLM专栏:点击! ⏰️创作时间:2025年2月21日21点21分 🀄️文章质量:95分 文章目录 使用CMD安装存放位置 默认存放路径 Open WebUI下…...
Maven 私服的搭建与使用(一)
一、引言 在 Java 项目开发中,Maven 作为强大的项目管理和构建工具,极大地提高了开发效率,而 Maven 私服在开发过程中也扮演着至关重要的角色。私服是一种特殊的远程仓库,架设在局域网内,代理广域网上的远程仓库&…...
java每日精进 3.06 【多数据源】
数据库连接池(Database Connection Pool) 基本信息 是一种用于管理数据库连接的技术。它通过预先创建一定数量的数据库连接,并将其缓存在池中,供多个客户端或应用程序使用,从而减少了每次请求时连接数据库的开销。 …...
Leetcode 3469. Find Minimum Cost to Remove Array Elements
Leetcode 3469. Find Minimum Cost to Remove Array Elements 1. 解题思路2. 代码实现 题目链接:3469. Find Minimum Cost to Remove Array Elements 1. 解题思路 这一题我没啥特别好的思路,就只能动态规划了,倒是也能过,不过总…...
多线程-CompletableFuture
简介 CompletableFuture:异步任务编排工具。java 8中引入的一个类,位于juc包下,是Future的增强版。它可以让用户更好地构建和组合异步任务,避免回调地狱。 在CompletableFuture中,如果用户没有指定执行异步任务时的线…...
常用限流算法解析与实现
一、固定窗口计数器法 原理:在固定时间窗口(如1秒)内统计请求次数,超过阈值则触发限流。 Java实现: public class FixedWindowCounter { private static final long WINDOW_MS 1000; // 1秒窗口 priv…...
Swift系列02-Swift 数据类型系统与内存模型
Swift 是一门现代的、安全的编程语言,其类型系统和内存模型设计对性能和安全性有着重要影响。本文将深入探讨 Swift 的数据类型系统与内存模型,帮助你更好地理解并利用这些特性来优化你的 iOS 应用。本文主要包含: 值类型和引用类型…...
如何不重启,生效windows环境变量
场景 使用php 进行composer 时,composer 要求php7.2以上,我常用的是7.1,不想来回修改,还是重启电脑 临时修改 打印当前环境变量 echo %PATH%临时修改当前环境变量(如果需要指定的值,可将全部复制出来&a…...
Ubuntu20.04本地配置IsaacLab 4.2.0的G1训练环境(二):训练与推理
Ubuntu20.04本地配置IsaacLab4 4.2.0的G1训练环境(二):训练与推理 训练推理 写在前面,本文档的实现需要IsaacLab的成功安装,可参考(一)。 训练 在IsaacLab目录下,isaaclab的conda虚…...
设计模式说明
23种设计模式说明 以下是常见的 23 种设计模式 分类及其核心思想、应用场景和简单代码示例,帮助你在实际开发中灵活运用: 一、创建型模式(5种) 解决对象创建问题,降低对象耦合。 1. 单例模式(Singleton&…...
K8s 1.27.1 实战系列(四)验证集群及应用部署测试
一、验证集群可用性 1、检查节点 kubectl get nodes ------------------------------------------------------ NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 3h48m v1.27.1 k8s-node1 Ready <none> …...
Artec Leo+Ray II 三维扫描仪成功为VR展数字化30吨重设备-沪敖3D
挑战:在贸易展上展示重达30吨的机械设备,同时克服设备搬运和展示的难题,减轻物流负担。。 解决方案:Artec Leo、Artec Ray II、Artec Studio、Blender、Unity、Microsoft HoloLens、HTC VIVE PRO 效果:在虚拟展厅中&am…...
Redis 各数据类型使用场景详解
1. 字符串(String) 场景 1:计数器(如文章阅读量) 问题: 高并发下对同一数值进行增减操作时,需保证原子性,避免竞态条件导致数据不一致。 频繁读写可能成为性能瓶颈。 解决方案&a…...
spark写数据库用连接池找不到driver类
最近遇到一个很离谱的bug,在写spark代码把数据写到mysql的时候考虑到连接的开销,所以用了HikariCP连接池,但是无语的是程序执行死活加载不到mysql的Driver类,但是解压了jar看到mysql-conn包就在lib下面,版本也是5.x的没…...
上传文件到对象存储是选择前端还是后端
对于云上对象存储的上传方式选择(前端直传或后端代理上传),需综合考虑安全性、性能、成本、业务需求等因素。 1. 推荐前端直传的场景 适用条件: 大文件上传(如视频、大型数据集)高并发场景(如…...
NanoMQ ds笔记250306
NanoMQ多版本下载地址 https://www.emqx.com/zh/downloads/nanomq NanoMQ官方文档 https://nanomq.io/docs/zh/latest/ NanoMQ 是一个专为物联网边缘计算设计的轻量级、高性能 MQTT 消息代理(Message Broker),由中国的开源物联网公司 EMQ 开…...
sqlmap:从基础用法到漏洞利用实战
1. sqlmap基础认知 sqlmap是一款开源的渗透测试工具,能自动检测和利用SQL注入漏洞,支持MySQL、Oracle、PostgreSQL等多种数据库管理系统。其设计旨在简化SQL注入检测流程,助力安全人员在复杂网络环境中快速定位与评估漏洞风险。它通过发送精…...
DFS学习笔记
题目描述 X 国王有一个地宫宝库。是 nm 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值…...
C++ STL string容器全解析
一、引言 在 C 编程的广阔领域中,字符串处理是一项极为基础且频繁的操作。从简单的文本解析,到复杂的文件读取与处理,字符串几乎无处不在。而 C 中的 string 容器,就像是一把瑞士军刀,为我们处理字符串提供了强大而便…...
React基础之项目创建
项目创建 create-react-app 项目名(小写) 运行 pnpm run start 在React中,使用的语法格式是jsx,也就是js与html相结合的形式 import logo from ./logo.svg; import ./App.css; function App() { return ( <div className"App"> <head…...
迷你世界脚本道具接口:Item
道具接口:Item 彼得兔 更新时间: 2023-04-26 10:26:18 继承自 Actor 具体函数名及描述如下: 序号 函数名 函数描述 1 getItemName(...) 获取道具名称 2 getItemId(...) 获取actor对应的道具ID,如球类等 3 getDropItemNum(...) …...
Unity摄像机跟随物体
功能描述 实现摄像机跟随物体,并使物体始终保持在画面中心位置。 实现步骤 创建脚本:在Unity中创建一个新的C#脚本,命名为CameraFollow。 代码如下: using UnityEngine;public class CameraFollow : MonoBehaviour {public Tran…...
计算机毕业设计SpringBoot+Vue.js青年公寓服务平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
vue实现日历签到效果
在工作任务进行时,有一个签到日历的功能需求要实现,经过文档查询和样式优化实现了需求,在此记录一下。 技术背景:vue2vant(样式控件) less 一个公共样式文件 html实现部分: <div class"calenderB…...
(十 八)趣学设计模式 之 观察者模式!
目录 一、 啥是观察者模式?二、 为什么要用观察者模式?三、 观察者模式的实现方式四、 观察者模式的优缺点五、 观察者模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...
笔记:在Git中.gitmodules文件的功能和作用和如何使用
一、目的:简单介绍下在Git中.gitmodules文件的功能和作用已经 .gitmodules 文件是 Git 子模块(submodule)功能的一部分,用于管理和配置子模块。子模块允许一个 Git 仓库包含另一个 Git 仓库作为其子目录,这对于管理依赖…...
Swift 常量
Swift 常量 引言 Swift 是一种由苹果公司开发的编程语言,主要用于 iOS、macOS、watchOS 和 tvOS 等平台的应用开发。在 Swift 中,常量是一种不可变的变量,它用于存储固定不变的值。了解和使用常量是 Swift 编程的基础,本文将详细介绍 Swift 常量的概念、类型、声明以及使…...
Ubuntu20.04双系统安装及软件安装(七):Anaconda3
Ubuntu20.04双系统安装及软件安装(七):Anaconda3 打开Anaconda官网,在右侧处填写邮箱(要真实有效!),然后Submit。会出现如图示的Success界面。 进入填写的邮箱,有一封Ana…...
Google AI概览升级,AI模式全新登场!
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别
1. 什么是智能体 将大语言模型作为一个推理引擎。给定一个任务, 智能体自动生成完成任务所需步骤, 执行相应动作(例如选择并调用工具), 直到任务完成。 2. 先定义工具:Tools 可以是一个函数或三方 API也…...
nginx 配置403页面(已亲测)
问题:GET请求访问漏洞url即可看到泄露的内网ip 解决方式: 1.配置nginx 不显示真实Ip 2.限制接口只能是POST请求 具体配置: 编写一个403.html 在nginx的配置文件中,配置location参数: location /api/validationCode…...
安卓基础组件Looper - 02 native层面的剖析
文章目录 native使用使用总结创建Looper构造函数创建(不推荐)使用举例源代码 Looper::prepare 获取Looper可忽略初始化Looper主动休眠 pollAll主动唤醒 wake 发送消息 sendMessage轮询消息 native使用 Android Native Looper 机制 - 掘金 (juejin.cn) /system/core/libutils/…...
nodejs关于后端服务开发的探究
前提 在当前的环境中关于web server的主流开发基本上都是java、php之类的,其中java spring系列基本上占了大头,而python之流也在奋起直追,但别忘了nodejs也是可以做这个服务的,只是位置有点尴尬,现在就来探究下nodejs…...
QTday4
1:是进度条通过线程自己动起来 mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread>class mythread : public QThread {Q_OBJECT public:mythread(QObject* parent nullptr); protected:virtual void run() override; private: signals:virtual voi…...
服务器时间同步
方法一 [rootbogon hwh-ansible]# cat time-sync.sh #!/bin/bash # NTP 服务器信息 NTP_SERVER"192.168.42.12" PASSWORD"123456" # 多个 IP 地址 HOSTS("192.168.42.8" "192.168.42.9" "192.168.42.10" "192.168.42…...
蓝桥杯备赛日记【day1】(c++赛道)
一、裁纸刀问题(2022、规律、思维、省赛) 解法思路: 参考题目给出的例子发现。不管要裁剪多少次。最外围的四次是固定的。然后通过观察发现,我们的行的裁剪次数为(m-1) 次,而每行都需要裁剪列数…...
DeepSeek大模型 —— 全维度技术解析
DeepSeek大模型 —— 全维度技术解析 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家!点我试试!! 文章目录 DeepSeek大模型 —— 全维度技术解析一、模型架构全景解析1.1…...
嵌入式开发:傅里叶变换(5):基于STM32,实现CMSIS中的DSP库
目录 步骤 1:准备工作 步骤 2:创建 Keil 项目,并配置工程 步骤 3:在MDK工程上添加 CMSIS-DSP 库 步骤 5:编写代码 步骤 6:配置时钟和优化 步骤 7:调试与验证 步骤 8:优化和调…...
Ubuntu 24.04 配置ODBC连接ORACLE 11G数据库
1. 安装必要工具和驱动 1.1 安装unixODBC和依赖库 # apt update # apt install unixodbc unixodbc-dev libaio1 执行失败,报错 libaio1包找不到,先跳过,安装其他两个。 # apt install unixodbc unixodbc-dev 安装成功 1.2 下载Oracle…...
upload-labs靶场 1-21通关
目录 1.Pass-01 前端绕过 分析 解题 2.Pass-02 服务器端检测--修改IMME 分析 解题 3.Pass-03 黑名单绕过 分析 解题 4.Pass-04 .htaccess绕过 分析 解题 5.Pass-05 . .绕过和.user.ini绕过 分析 解题 6.Pass-06 大小写绕过 分析 解题 7.Pass-07 空格绕过 分…...
Docker新手入门(持续更新中)
一、定义 快速构建、运行、管理应用的工具。 Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。 所谓镜像,就是将应用所需的函数库、依赖、配置等应用一起打包得到的。 所谓容器,为每个镜像的应用进程创建…...
c语言笔记 指针篇(上)
1.指针 在计算的存储器中有很多的存储单元,我们的操作系统把这些存储单元以字节为单位进行编号,也就是每个存储单元(字节),都有编码。这些编码在我们内存中就称为地址。一个字节有八位,位是存储信息的最小单…...
要查看 SQLite 数据库中的所有表,可以通过查询 SQLite 的系统表 sqlite_master
要查看 SQLite 数据库中的所有表,可以查询 SQLite 的系统表 sqlite_master。 每个 SQLite 数据库都包含一个名为 sqlite_master 的系统表。该表定义了数据库的模式,存储了数据库中所有表、索引、视图和触发器等对象的信息。 通过查询 sqlite_master&am…...
C#释放内存空间的方法
目录 前言释放 C# 对象内存的六种方法1、手动释放内存空间2、使用 Using 语句3、使用 垃圾回收器4、GC.Collect() 方法5、GC.WaitForPendingFinalizers() 方法6、WeakReference 类 注意 前言 当不再需要对象时释放内存空间对于防止内存泄漏和提高应用程序性能至关重要。C# 提供…...
mapbox基础,使用点类型geojson加载symbol符号图层,用于标注文字
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️symbol符号图层样式二、🍀使用点类型…...
Java数组详解/从JVM理解数组/数组反转/随机排名/数组在计算机如何存储
本文详细讲解了数组的定义、数组的访问方法、数组的遍历、静态数组和动态数组、以及数组中的自动类型转换、引用类型指向数组的地址、以及从JVM理解数组、空指针异常、数组反转、随机排名的案例。 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索…...