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

【C++指南】作用域限定符 :: 使用详解

           💓 博客主页:倔强的石头的CSDN主页 

           📝Gitee主页:倔强的石头的gitee主页

            ⏩ 文章专栏:《C++指南》

                                  期待您的关注

1b7335aca73b41609b7f05d1d366f476.gif

目录

引言 

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++代码至关重要。

http://www.lryc.cn/news/439763.html

相关文章:

  • 项目实训:CSS基本布局理解——WEB开发系列38
  • springBoot整合easyexcel实现导入、导出功能
  • 代码随想录训练营第35天|逆序背包
  • Centos7环境下Hive的安装
  • ??Ansible——ad-hoc
  • 清理Go/Rust编译时产生的缓存
  • 【linux】 ls命令
  • STM32的寄存器深度解析
  • win11 运行vmware workstation 虚拟机很卡,解决办法
  • C语言 | Leetcode C语言题解之第404题左叶子之和
  • jeesite支持db2数据库初始化sql
  • 微信小程序页面制作——婚礼邀请函(含代码)
  • 股票量化接口api,国内股票期权怎么交易
  • Spring解决循环依赖的原理
  • Openal o1初探
  • 基于python+django+vue的学生成绩管理系统
  • mimd 公平收敛在相图中的细节
  • 爬虫--翻页tips
  • 论文内容分类与检测系统源码分享
  • 【MySQL】将表导出CSV(可以使用excel打开)
  • 通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP服务端】
  • 梧桐数据库(WuTongDB):RBO(Rule-Based Optimizer)优化器简介
  • 【农信网-注册/登录安全分析报告】
  • Gitea Action 简单配置(CI/CD)
  • 苍穹外卖 修改nginx的端口后websocket连接失败解决
  • 快速解决Linux中wine程序中文显示为方块的问题
  • 【C++前后缀分解 动态规划】2100. 适合野炊的日子|1702
  • HarmonyOS 速记
  • 使用 Milvus、vLLM 和 Llama 3.1 搭建 RAG 应用
  • 【springboot】父子工程项目搭建