C++作用域辨识详解
在 C++ 中,作用域(Scope)定义了变量、函数、类等标识符的可见性和生命周期。理解作用域对于编写清晰、高效的代码至关重要。以下是 C++ 中作用域的详细分类和说明。
1. 全局作用域(Global Scope)
全局作用域是指在所有函数和类定义之外的区域。全局变量和函数可以在程序的任何地方访问,只要它们在访问点之前被声明。
示例
int globalVar = 10; // 全局变量void globalFunction() {std::cout << "Global function called" << std::endl;
}int main() {std::cout << globalVar << std::endl; // 访问全局变量globalFunction(); // 调用全局函数return 0;
}
2. 局部作用域(Local Scope)
局部作用域是指在函数或代码块内部定义的变量的作用域。局部变量只能在其定义的代码块内访问。
示例
int main() {int localVar = 20; // 局部变量{int innerVar = 30; // 内部代码块的局部变量std::cout << localVar << ", " << innerVar << std::endl; // 访问内部变量}// std::cout << innerVar << std::endl; // 错误:innerVar 超出作用域std::cout << localVar << std::endl; // 访问外部局部变量return 0;
}
3. 类作用域(Class Scope)
类作用域是指在类定义内部的区域。类的成员(包括变量和函数)只能在类的作用域内访问。可以通过类名或对象名访问类的成员。
示例
class MyClass {
public:int classVar = 40; // 类成员变量void classFunction() {std::cout << "Class function called" << std::endl;}
};int main() {MyClass obj;std::cout << obj.classVar << std::endl; // 访问类成员变量obj.classFunction(); // 调用类成员函数return 0;
}
4. 函数参数作用域(Function Parameter Scope)
函数参数的作用域是从函数定义开始到函数体结束。函数参数在函数调用时被初始化,并在函数返回时销毁。
示例
void functionWithParams(int param) {std::cout << param << std::endl; // 访问函数参数
}int main() {functionWithParams(50);// std::cout << param << std::endl; // 错误:param 超出作用域return 0;
}
5. 命名空间作用域(Namespace Scope)
命名空间作用域是指在命名空间定义内部的区域。命名空间可以用来组织代码,避免命名冲突。可以通过命名空间的作用域运算符 ::
访问命名空间中的标识符。
示例
namespace MyNamespace {int namespaceVar = 60; // 命名空间变量void namespaceFunction() {std::cout << "Namespace function called" << std::endl;}
}int main() {std::cout << MyNamespace::namespaceVar << std::endl; // 访问命名空间变量MyNamespace::namespaceFunction(); // 调用命名空间函数return 0;
}
6. 类模板和函数模板的作用域
模板参数的作用域是从模板定义开始到模板实例化结束。模板参数在模板实例化时被确定。
示例
template <typename T>
void templateFunction(T param) {std::cout << param << std::endl; // 访问模板参数
}int main() {templateFunction(70);// std::cout << param << std::endl; // 错误:param 超出作用域return 0;
}
7. 块作用域(Block Scope)
块作用域是指在任何用 {}
包裹的代码块内部的区域。块可以是函数体、if
语句、for
循环、while
循环等。
示例
int main() {int blockVar = 80; // 局部变量if (true) {int innerBlockVar = 90; // 内部块的局部变量std::cout << blockVar << ", " << innerBlockVar << std::endl;}// std::cout << innerBlockVar << std::endl; // 错误:innerBlockVar 超出作用域std::cout << blockVar << std::endl;return 0;
}
8. Lambda 表达式的作用域
Lambda 表达式的作用域包括捕获列表中捕获的变量。Lambda 表达式可以访问其定义所在的作用域中的变量。
示例
int main() {int lambdaVar = 100;auto lambda = [lambdaVar]() {std::cout << lambdaVar << std::endl; // 访问捕获的变量};lambda();return 0;
}
9. 作用域嵌套
作用域可以嵌套。内部作用域可以访问外部作用域中的变量,但外部作用域不能访问内部作用域中的变量。如果内部作用域中定义了与外部作用域同名的变量,则内部变量会隐藏外部变量。
示例
int main() {int outerVar = 110; // 外部变量{int outerVar = 120; // 内部变量,隐藏外部变量std::cout << outerVar << std::endl; // 访问内部变量}std::cout << outerVar << std::endl; // 访问外部变量return 0;
}
10. 作用域链
作用域链是指在嵌套作用域中,标识符的查找顺序是从内向外。如果在内部作用域中找不到某个标识符,则会继续在外部作用域中查找。
示例
int globalVar = 130; // 全局变量int main() {int localVar = 140; // 局部变量{int innerVar = 150; // 内部变量std::cout << globalVar << ", " << localVar << ", " << innerVar << std::endl;}return 0;
}
总结
- 全局作用域:在所有函数和类定义之外。
- 局部作用域:在函数或代码块内部。
- 类作用域:在类定义内部。
- 函数参数作用域:在函数定义和函数体内部。
- 命名空间作用域:在命名空间定义内部。
- 模板作用域:在模板定义和模板实例化之间。
- 块作用域:在任何用
{}
包裹的代码块内部。 - Lambda 表达式作用域:在 Lambda 表达式及其捕获列表中。
- 嵌套作用域:内部作用域可以访问外部作用域中的变量,但外部作用域不能访问内部作用域中的变量。
- 作用域链:标识符的查找顺序是从内向外。
相关文章:
C++作用域辨识详解
在 C 中,作用域(Scope)定义了变量、函数、类等标识符的可见性和生命周期。理解作用域对于编写清晰、高效的代码至关重要。以下是 C 中作用域的详细分类和说明。 1. 全局作用域(Global Scope) 全局作用域是指在所有函…...
MYTOOL-记事本
一、前言 目录 1.原型设计 2.程序实现 3.最终界面说明 二、环境 windows10 每个软件工具前期会设计大概的原型,我设计的原型工具使用Axure RP9,很不错的一个设计工具 三、正文 1.原型设计 2.程序实现 3.最终界面说明 四、结语...
混合知识表示系统框架python示例
前文我们已经深入学习了框架表示法、产生式规则和一阶谓词逻辑,并对它们进行了深度对比,发现它们在不同的应用场景下各有优缺点。 一阶谓词逻辑适合复杂逻辑推理场景,具有数学定理证明、形式化系统规范的优点;产生式规则适合动态决策系统,支持实时决策(如风控、诊断),规…...
Vue2——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs
文章目录 一、概念理解二、指令1. 常用内置指令总结2. 常用指令修饰符3. 自定义指令4. v-model原理表单类组件封装 三、补充1. computed计算属性2. watch监视器3. ref和$refs 一、概念理解 【事件处理函数】 事件处理函数应该写到一个跟data同级的配置项(methods&a…...
2025-3-29算法打卡
一,回文判定 1.题目描述: 题目描述 给定一个长度为 nn 的字符串 SS。请你判断字符串 SS 是否回文。 输入描述 输入仅 11 行包含一个字符串 SS。 1≤∣S∣≤1061≤∣S∣≤106,保证 SS 只包含大小写、字母。 输出描述 若字符串 SS 为回…...
【网络编程】搭建一个简单的UDP通信服务器和客户端
🦄个人主页:修修修也 🎏所属专栏:网络编程 ⚙️操作环境:VS Code (操作系统:Ubuntu 22.04 server 64bit) 目录 搭建UDP服务器 搭建UDP客户端 其余工程文件 主函数文件Main.cc 日志打印文件Log.hpp Makefile文件 结语 搭建UDP服务器 搭建UDP服务器的主要流…...
数据分析概述
数据分析:用适当的分析方法和挖掘方法对收集来的数据进行研究总结,提取有用的信息,形成结论并支持决策的过程。 一.数据分析的分类 1.业务描述性分析。以数据为分析对象,以探索数据内的有用信息为主要途径,以解决业务…...
【C#】C#字符串拼接的6种方式及其性能分析对比
C#字符串拼接的6种方式及其性能分析对比 前言BenchmarkDotNet拼接基础数据操作符$内插字符串String.FormatString.ConcatString.JoinStringBuilder性能基准对比测试完整代码少量字符串拼接大量字符串拼接 前言 在C#编程中字符串拼接是一种常见且基础的操作,广泛应用…...
图解AUTOSAR_SWS_SPIHandlerDriver
AUTOSAR SPI Handler/Driver 详解 AUTOSAR标准下的SPI通信模块详细设计与实现 目录 AUTOSAR SPI Handler/Driver 详解 目录1. AUTOSAR SPI模块概述 1.1 SPI模块的作用1.2 SPI模块在AUTOSAR中的位置1.3 SPI模块整体架构 2. SPI模块状态机 2.1 状态定义2.2 状态转换2.3 子状态机…...
华为HCIE网络工程师培训选机构攻略
从 官方授权机构 到 性价比黑马,结合价格、师资、通过率等维度,为你筛选出最适合的培训方案。 一、华为官方授权机构(优先推荐) 华为官方授权机构拥有 真机实验环境考官级讲师,适合预算充足、追求高通过率的学员。 机…...
【银河麒麟系统常识】命令:dotnet --list-sdks(列出已安装的 .NET SDK 版本)
命令: dotnet --list-sdks 功能 列出当前系统中所有已安装的 .NET SDK 版本; 返回值规则 # 1. 格式:<版本号>[<安装路径>]; # 2. 排序:按版本号从低到高排序;示例...
【数据仓库】湖仓一体的核心建模理论
湖仓一体(Lakehouse)是一种融合数据湖与数据仓库优势的新型架构,其建模理论在传统数据仓库与数据湖基础上进行了扩展和创新。以下从核心建模理论、关键技术支撑及与传统架构的差异三个维度进行解析: 一、湖仓一体的核心建模理论 …...
Go 语言规范学习(3)
文章目录 Properties of types and valuesRepresentation of valuesUnderlying types【底层类型】Core types【核心类型】Type identityAssignabilityRepresentabilityMethod sets BlocksDeclarations and scopeLabel scopesBlank identifierPredeclared identifiersExported i…...
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,图书推荐网当然不能排除在外。本次开发的优秀少儿图书推荐网是在实际应用和软件工程的开发原理之上,运用Python语言、爬虫技术…...
CS2 DEMO导入blender(慢慢更新咯)
流程:cs2-sourcefilmmaker-blender 工具:cs2tools,cs2manager,blender,blender插件sourceio,source2viewer 导入sfm 工具界面 选择这个 sourceio插件 sourceIO其中新版本导入相机路径不见了,…...
SVTAV1函数分析-svt_av1_cost_coeffs_txb
一 函数作用 函数svt_av1_cost_coefss_txb是一个与AV1视频编码相关的函数,主要用于计算变换块(Transform Block)中系数的成本(Cost)。在视频编码中,特被是在AV1编码中,计算系数的成本对于模式决策(Mode Decision)和熵编码(Entropy Coding) 等…...
【Linux加餐-验证UDP:TCP】-windows作为client访问Linux
一、验证UDP-windows作为client访问Linux UDP client样例代码 #include <iostream> #include <cstdio> #include <thread> #include <string> #include <cstdlib> #include <WinSock2.h> #include <Windows.h>#pragma warning(dis…...
qt+opengl 加载三维obj文件
1前面我们已经熟悉了opengl自定义顶点生成一个立方体,并且我们实现了立方体的旋转,光照等功能。下面我们来用opengl来加载一个obj文件。准备我们首先准备一个简单的obj文件(head.obj)。资源在本页下载 2 在obj文件里面,…...
日报日报流量分析
快捷键 CtrlK,选择需要抓包的网卡 CtrlF可以进行关键字搜索 CtrlM,标记数据包 CtrlShiftN跳到标记处 查看包有多少协议Protocol Hierarchy(协议分级) 搜了一下TCP协议,是互联网最基本的协议࿰…...
SQL:CASE WHEN使用详解
文章目录 1. 数据转换与映射2. 动态条件筛选3. 多条件分组统计4. 数据排名与分级5. 处理空值与默认值6. 动态排序 CASE WHEN 语句在 SQL 中是一个非常强大且灵活的工具,除了常规的条件判断外,还有很多巧妙的用法,以下为你详细总结:…...
在 Unreal Engine 5 中制作类似《鬼泣5》这样的游戏时,角色在空中无法落地的问题可能由多种原因引起。
系列文章目录 文章目录 系列文章目录前言一、实现步骤二、涉及到的蓝图三、如何把敌人击飞到空中 前言 在 Unreal Engine 5 中制作类似《鬼泣5》这样的游戏时,角色在空中无法落地的问题可能由多种原因引起。 一、实现步骤 角色碰撞设置 确保角色的碰撞组件&…...
mapbox进阶,添加鹰眼图控件
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️mapboxgl-minimap 鹰眼控件二、🍀添加…...
k8s污点与容忍
k8s污点与容忍 k8s污点管理常用命令effect标记值查看污点添加污点删除污点 node污点与容忍污点容忍yaml示例容忍放大基于污点的驱逐驱逐时排除指定服务 设置master调度设置master尽量不调度允许master节点调度pod恢复Master Only状态将node标记为不可调度状态(节点警戒)设置nod…...
算法刷题记录——LeetCode篇(9.1) [第801~810题]
更新时间:2025-03-29 算法题解目录汇总:算法刷题记录——题解目录汇总技术博客总目录:计算机技术系列博客——目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 801. 使序列递增的最小交换次数…...
AOA与TOA混合定位,MATLAB例程,自适应基站数量,三维空间下的运动轨迹,滤波使用EKF
本代码实现了一个基于 到达角(AOA) 和 到达时间(TOA) 的混合定位算法,结合 扩展卡尔曼滤波(EKF) 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络,展示了从信号测量、定位解算到轨迹滤波的全流程,适用于城市峡谷、室内等复杂环境下的定位研究。 文…...
【vllm/瞎折腾】在内网wsl上安装vllm并尝试多节点部署(失败了)
目录 说在前面miniconda安装外网创建虚拟环境创建节点一的虚拟环境创建节点二的虚拟环境 内网配置环境配置节点一的环境配置节点二的环境 vllm多节点配置节点一(主节点)配置节点二配置 部署LLM(失败)补充:wsl2设置ulimit补充:wsl安装libcuda补充…...
Mayo Clinic Platform在人工智能医疗领域的现状及启示意义研究
一、引言 1.1 研究背景与意义 在科技飞速发展的当下,人工智能(AI)已逐渐渗透至各个行业,医疗领域作为关乎人类生命健康的重要领域,也迎来了人工智能技术带来的深刻变革。人工智能医疗,作为人工智能与医疗行业深度融合的产物,正重塑着全球医疗的格局。 从全球范围来看,…...
k8s部署教程
Kubernetes 1. 使用Kubernetes部署Web服务器 我们的目标是部署三个实例,可以让用户直接访问。三个实例,这样即便一个崩溃了,也还有两个,比较不容易出问题。实际中你要根据自己的业务来判断。也就是说,我们需要一个…...
java基础:常见类和对象
1.常见类和对象: java.lang.Object类,Java中的每个类都直接或间接地继承自Object类,如果没有明确指定一个类继承另一个类,那么它的默认父类就是Object类; 例如多态: package java_jichu;public class ja…...
了解遗传算法的Matlab程序的奥妙之处
老板突然想要了解遗传算法的Matlab程序,我们需要先理清楚他们的需求。首先,老板可能对遗传算法有一定的了解,但不太清楚如何在Matlab中具体实现。他可能是一个学生或者研究人员,需要应用到某个项目中,比如优化问题。老板可能希望得到一个结构清晰的步骤说明,以及具体的代…...
Java学习------源码解析之StringBuilder
1. 介绍 String中还有两个常用的类,StringBuffer和StringBuilder。这两个类都是专门为频繁进行拼接字符串而准备的。最先出现的是StringBuffer,之后到jdk1.5的时候才有了StringBuilder。 2. StringBuilder解析 从这张继承结构图可以看出: S…...
【漫话机器学习系列】163.方差膨胀因子(Variance Inflation Factor, VIF)
方差膨胀因子(Variance Inflation Factor, VIF)详解 1. 什么是方差膨胀因子? 方差膨胀因子(Variance Inflation Factor, VIF)是一种用于衡量回归分析中多重共线性(Multicollinearity)程度的指…...
蓝桥杯省模拟赛 字符串拼接
问题描述 给定四个字符串 a,b,c,d,请将这四个字符串按照任意顺序依次连接拼成一个字符串。 请问拼成的字符串字典序最小是多少? 输入格式 输入四行,每行包含一个字符串。 输出格式 输出一行包含一个字符串,表示答案。 样例…...
前端路由守卫与后端权限验证,仅使用路由守卫是否安全?
前后端分离架构的安全原则 后端必须对所有 API 接口进行权限验证前端仅负责用户界面的重定向安全策略应始终由后端最终决定 问题1:前端设置路由守卫是否可以阻挡用户直接通过URL访问??? 前端路由守卫(如 Vue Router …...
React-nodejs 练习 个人博客
1.主要功能模块: 文章管理:CRUD操作 用户系统:注册、登录、权限控制评论系统:文章评论功能 2.技术栈: 前端:React Ant Design React Router后端:Express MongoDB 通信:RESTful…...
AI三大主义 和 深度学习三大主义
在人工智能(AI)研究领域,"三大主义"通常指三种核心方法论或思想流派,它们代表了不同的技术路径和哲学观点。以下是主流的划分方式: 1. 符号主义(Symbolicism) 核心思想:智…...
Linux实现生产者消费者模型(基于阻塞队列)
目录 概念及优势 代码实现 概念及优势 生产者消费者模型是一种用于线程同步的模型,在这个模型中有两种角色,生产者生产数据,消费者消费数据。有三种关系,生产者与生产者,消费者与消费者,生产者与消费者。…...
UE5 UE4 右键/最大化-菜单-不显示/闪/黑色/黑屏--修复方法
先关闭UE5 、UE4 编辑器。 进入这个网站:https://nvidia.custhelp.com/app/answers/detail/a_id/5157 网速慢,换成这个下载:https://download.csdn.net/download/qq_21153225/90546310 下载:mpo_disable.reg 的文件 只双击“mpo…...
[ C语言 ] | 从0到1?
目录 认识计算机语言 C语言 工欲善其事必先利其器 第一个C语言代码 这一些列 [ C语言 ] ,就来分享一下 C语言 相关的知识点~ 认识计算机语言 我们说到计算机语言,语言,就是用来沟通的工具,计算机语言呢?就是我们…...
4.训练篇2-毕设篇
resnet # 1. 从 torchvision 中加载预训练的 ResNet18 模型 # pretrainedTrue 表示使用在 ImageNet 上预训练过的参数,学习效果更好 base_model_resnet18 models.resnet18(pretrainedTrue)# 2. 获取 ResNet18 模型中全连接层(fc)的输入特征…...
Ubuntu 系统中,每日健康检查
一、手动检查命令(基础项) 1. 系统资源监控 内存使用: free -h # 查看内存和交换空间使用情况 cat /proc/meminfo | grep -i "memavailable" # 查看可用内存CPU 负载: top -n 1 -b | grep "load ave…...
#CX# UVM中的virtual sequence 和 virtual sequencer 的用途
在UVM中,Virtual Sequence(虚拟序列) 的核心用途是协调多个物理Sequencer上的Sequence执行,以实现跨接口、跨组件的复杂事务同步和场景控制。 1. 核心用途 多接口协同测试 当验证场景需要多个接口(如DUT的AXI、I2C、UART接口)同时或按特定顺序发送事务时,Virtual Seque…...
vue:突然发现onok无法使用
const that this;this.$confirm({title: "修改商品提示",content: "如果当前商品存在于商品活动库,则在商品活动库的状态会下架",onOk: function () {that.submitForm();}}); 突然发现 this.$confirm无法进入onok 最终发现是主题冲突&#x…...
开发过程中需要安装的浏览器插件
Vue.js devtools https://chromewebstore.google.com/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hlzh-CN&utm_sourceext_sidebar ModHeader https://chromewebstore.google.com/detail/modheader-modify-http-hea/idgpnmonknjnojddfkpgkljpfnnfcklj?utm…...
基于javaweb的SpringBoot房屋出租系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
小程序某点餐平台全自动化实现思路
某德基全自动化实现 一、实现思路二、具体步骤1、分析接口2、破解接口3、解决自动支付4、获取订单 三、其他 以下内容仅供学习交流使用 粗略讲解一下思路,要完全实现只靠以下这些内容还是不够的。 一、实现思路 全自动化实现用的是小程序版本。我们首先要分析整个…...
红宝书第二十讲:详解JavaScript的Proxy与Reflect
红宝书第二十讲:详解JavaScript的Proxy与Reflect 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、Proxy的作用:给对象戴上“监听耳机” Proxy(代理)允许你为对象…...
Contactile三轴触觉传感器:多维力感赋能机器人抓取
在非结构化环境中,机器人对物体的精准抓取与操作始终面临巨大挑战。传统传感器因无法全面感知触觉参数(如三维力、位移、摩擦),难以适应复杂多变的场景。Contactile推出的三轴触觉力传感器,通过仿生设计与创新光学技术…...
18-动规-子序列中的 k 种字母(中等)
题目 来源 28. 子序列中的 k 种字母(第一期模拟笔试) 思路 基本分析 子序列的定义 子序列是从原序列中选取部分元素,同时保持这些元素在原序列中的相对顺序所形成的新序列。也就是说,子序列中的元素不需要在原序列中连续出现…...
Lua 数组
Lua 数组 引言 Lua 是一种轻量级、高效的脚本语言,广泛应用于游戏开发、服务器端编程等领域。在 Lua 中,数组是一种非常重要的数据结构,它允许开发者以高效的方式存储和操作一系列数据。本文将详细介绍 Lua 数组的相关知识,包括…...