【C++指南】作用域限定符 :: 使用详解
💓 博客主页:倔强的石头的CSDN主页
📝Gitee主页:倔强的石头的gitee主页
⏩ 文章专栏:《C++指南》
期待您的关注
目录
引言
1. 访问全局变量
2. 命名空间中的成员访问
3. 类的静态成员访问
4. 嵌套命名空间/类中的成员访问
总结
引言
在C++中,作用域限定符(Scope Resolvers)主要用于访问特定作用域中的成员,特别是在处理类、命名空间(Namespace)等复杂结构时非常有用。它们帮助编译器确定某个标识符(如变量名、函数名等)的精确作用域,从而避免命名冲突和歧义。
最常用的作用域限定符是
::
(双冒号),用于访问全局变量、命名空间中的成员以及类的静态成员。下面我们将详细探讨这些用法。
1. 访问全局变量
在函数内部,如果局部变量与全局变量同名,局部变量的作用域会覆盖全局变量的作用域。
此时,如果要访问全局变量,就需要使用::
操作符。不过,通常不推荐在函数内部使用全局变量,因为这会增加代码的耦合度和复杂度。但为了演示作用域限定符的用法,这里给出一个例子:
#include <iostream> int x = 5; // 全局变量 void func() { int x = 10; // 局部变量 std::cout << ::x << std::endl; // 使用::访问全局变量x,输出5 std::cout << x << std::endl; // 访问局部变量x,输出10
} int main() { func(); return 0;
}
2. 命名空间中的成员访问
命名空间是C++中用于组织代码的一种方式,可以避免全局命名冲突。在访问命名空间中的成员时,可以使用::
操作符来指定命名空间。
关于命名空间的更多详细内容,可以参考文章
【C++指南】命名空间-CSDN博客
#include <iostream> namespace Math { int add(int a, int b) { return a + b; }
} int main() { std::cout << Math::add(2, 3) << std::endl; // 访问Math命名空间中的add函数 return 0;
}
3. 类的静态成员访问
类的静态成员(包括静态变量和静态成员函数)属于类本身,而不是类的某个具体对象。因此,在访问这些静态成员时,可以使用类名和作用域限定符::
。
#include <iostream> class MyClass {
public: static int count; // 静态成员变量 static void printCount() { // 静态成员函数 std::cout << "Count: " << count << std::endl; }
}; int MyClass::count = 0; // 静态成员变量初始化 int main() { MyClass::count = 5; // 访问并修改静态成员变量 MyClass::printCount(); // 调用静态成员函数,输出:Count: 5 return 0;
}
注意:
类的非静态成员(包括成员变量和成员函数)通常不能直接通过作用域限定符(
::
)来访问,因为非静态成员是依赖于类的具体对象的。
4. 嵌套命名空间/类中的成员访问
当命名空间或类嵌套时,可以通过连续使用::
操作符来访问深层的成员。
namespace Outer { namespace Inner { int value = 10; }
} class OuterClass {
public: class InnerClass { public: static int value = 20; };
}; int main() { std::cout << Outer::Inner::value << std::endl; // 访问嵌套命名空间中的value std::cout << OuterClass::InnerClass::value << std::endl; // 访问嵌套类中的静态成员变量 return 0;
}
总结
作用域限定符
::
在C++中扮演着至关重要的角色,它使得我们能够精确控制访问的范围,避免命名冲突,并清晰地表达代码的意图。无论是访问全局变量、命名空间中的成员,还是类的静态成员,
::
都是不可或缺的。掌握其作用和用法,对于编写清晰、高效、可维护的C++代码至关重要。
相关文章:

【C++指南】作用域限定符 :: 使用详解
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 1. 访问全局变量 2. 命名空间中的成员访问 3. 类的静态成员访问 4. 嵌套命名空间/类中的…...

项目实训:CSS基本布局理解——WEB开发系列38
对CSS学习已经接近尾声,下面你可以对以下两道“小卡拉米”测试进行测试下CSS理解程度。 题 1:基于栅格布局的现代博客首页设计 题目要求: 创建一个博客首页布局,包含一个顶部导航栏、一个主要的内容区域(左侧为博客文…...
springBoot整合easyexcel实现导入、导出功能
本次使用的框架是springboot,使用mybatisplus操作表,使用easyexcel实现表格的导入与导出。 操作步骤 1、导入依赖:(pom.xml) <!-- 查看excel的maven仓库 https://mvnrepository.com/artifact/com.alibaba/easyex…...
代码随想录训练营第35天|逆序背包
46. 携带研究材料 #include <iostream> #include <vector> using namespace std; int main(){int m,n;cin>>m>>n;vector<int> weights(m,0), values(m,0),dp(n1,0);for(int i0; i<m; i){cin>>weights[i];}for(int i0; i<m; i){cin…...

Centos7环境下Hive的安装
Centos7环境下Hive的安装 前言一、安装Hive1.1 下载并解压1.2 配置环境变量1.3 修改配置1. hive-env.sh2. hive-site.xml 1.4 拷贝数据库驱动1.5 初始化元数据库报错 1.6 安装MySQL1.7 启动 二、HiveServer2/beeline2.1 修改Hadoop配置2.2 修改Hive配置2.2 启动hiveserver22.3 …...

??Ansible——ad-hoc
文章目录 一、ad-hoc介绍二、ad-hoc的使用1、语法2、ad-hoc常用模块1)shell模块2)command模块3)script模块4)file模块5)copy模块6)yum模块7)yum-repository模块8)service模块9&#…...

清理Go/Rust编译时产生的缓存
Go Mac 1T的磁盘频频空间高级,发现是/Users/yourname/Library/Caches/go-build 目录占用了大量空间。 此目录保存来自 Go 构建系统的缓存构建工件。 如果目录太大,请运行go clean -cache。 运行go clean -fuzzcache以删除模糊缓存。 当时直接手工清理了…...
【linux】 ls命令
ls 命令是 Linux 和 Unix 系统中用于列出目录内容的命令。它显示指定目录下的文件和子目录列表。如果不指定目录,ls 默认显示当前目录下的内容。 基本用法 ls [选项] [文件或目录...] 无选项:简单地列出当前目录下的文件和目录。文件或目录࿱…...

STM32的寄存器深度解析
目录 一、STM32 寄存器概述 二、寄存器的定义与作用 三、寄存器分类 1.内核寄存器 2.外设寄存器 四、重要寄存器详解 1.GPIO 相关寄存器 2.定时器相关寄存器 3.中断相关寄存器 4.RCC 相关寄存器 五、寄存器操作方法 1.直接操作寄存器 2.使用库函数操作寄存器 六…...
win11 运行vmware workstation 虚拟机很卡,解决办法
本身win11的hyper V和vmare workstation有兼容性问题,正常来说,不能二者共存 需要在win11上流畅运行vmare虚拟机,需要在win11用管理员权限打开power shell 然后在里面运行命令: bcdedit /set hypervisorlaunchtype off powercfg /powerthr…...

C语言 | Leetcode C语言题解之第404题左叶子之和
题目: 题解: bool isLeafNode(struct TreeNode *node) {return !node->left && !node->right; }int sumOfLeftLeaves(struct TreeNode *root) {if (!root) {return 0;}struct TreeNode **q malloc(sizeof(struct TreeNode *) * 2001);in…...
jeesite支持db2数据库初始化sql
点击下载:jeesite5.8.1-db2-sql.rar 提取码: yqev...

微信小程序页面制作——婚礼邀请函(含代码)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
股票量化接口api,国内股票期权怎么交易
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...
Spring解决循环依赖的原理
通过将自己注入自己,使用代理对象调用add方法解决了事务失效问题,但是这样不会产生循环依赖吗? 在OrdersCreateServiceImpl 中注入的是OrdersCreateServiceImpl 的代理对象,并不是OrdersCreateServiceImpl 本身实例,构…...

Openal o1初探
9 月 13 日,OpenAI 正式公开一系列全新 AI 大模型,传说的“草莓”终于上线,但是正式命名不叫“草莓”,而是o1。 一、为什么叫o1 为什么取名叫o1,OpenAI是这么说的: For complex reasoning tasks this is…...

基于python+django+vue的学生成绩管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…...

mimd 公平收敛在相图中的细节
aimd 的收敛已经说腻了,我曾经画了好几次相图。有朋友希望我能画一个 mimd 相图,我就再画一个稍微详细的。 下面相图收敛到稳定点的前提异步 mimd: 之所以要异步,举个例子,在执行 gx 时,要确保 y 已经执…...

爬虫--翻页tips
免责声明:本文仅做分享! 伪线程 from DrissionPage import ChromiumPage import timepage ChromiumPage() page.get("https://you.ctrip.com/sight/taian746.html") # 初始化 第0页 index_page 0# 翻页点击函数 sleep def page_turn():page…...

论文内容分类与检测系统源码分享
论文内容分类与检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...