首页 > 其他分享 >深入理解作用域符号(::)

深入理解作用域符号(::)

时间:2024-12-19 21:31:30浏览次数:11  
标签:std cout 符号 作用域 int 深入 命名 using

大家好!我是兔飞飞!今天学习作用域符号(::)。

用更直白的话来理解作用域符号(::):

  1. 全局作用域符(::name

    • 如果前面加上::,就是明确告诉编译器:这个名字(变量、函数等)是属于全局命名空间的,不是局部定义的。
    • 举例:
      int value = 10; // 全局变量
      void func() {
          int value = 20; // 局部变量
          std::cout << ::value; // 输出 10,全局的 value
      }
      
  2. 类作用域符(class::name

    • 当一个名字属于某个类时,用类名::名字来访问这个类里的东西,比如它的成员函数或变量。
    • 举例:
      class MyClass {
      public:
          static int value; // 类的静态变量
          void showValue() {
              std::cout << MyClass::value; // 访问类的静态变量
          }
      };
      
  3. 命名空间作用域符(namespace::name

    • 当一个名字被定义在某个命名空间里,用命名空间名::名字来访问这个命名空间里的东西。
    • 举例:
      namespace MyNamespace {
          int value = 100;
      }
      void func() {
          std::cout << MyNamespace::value; // 访问命名空间中的 value
      }
      

总结:
::的意思就是明确地“找某个范围的东西”。

  • 没前缀(全局)→ 全局找(::name
  • 类前缀 → 类里面找(class::name
  • 命名空间前缀 → 命名空间里面找(namespace::name
4.例子:最常见的std::

std:: 也是一个命名空间作用域符,表示标准库(std)命名空间里的东西。

为什么要用 std::

C++ 标准库里的很多函数和类都被放在了 std 命名空间里,比如 cout, cin, string 等。这是为了避免名字冲突(比如你自己写了个 cout,就不会和标准库的 cout 冲突)。

举个例子:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

这里的 std::coutstd::endl 都是在 std 命名空间里的。


怎样避免总写 std::

如果觉得老是写 std:: 太麻烦,可以用下面的方法:

  1. 使用 using namespace std;

    • 意思是:告诉编译器“直接用 std 命名空间里的所有东西,不用每次都写 std::”。
    • 示例:
      #include <iostream>
      
      using namespace std;
      
      int main() {
          cout << "Hello, World!" << endl;
          return 0;
      }
      
    • 缺点:可能和你自己写的名字冲突(比如你也写了个 vector,但标准库也有个 std::vector)。
  2. using 指定单个名字

    • 如果只想用某个具体名字而不写 std::,可以用 using 声明单个名字:
      #include <iostream>
      
      using std::cout;
      using std::endl;
      
      int main() {
          cout << "Hello, World!" << endl;
          return 0;
      }
      

如果你希望在自己的代码中避免频繁写 std::cout,可以尝试第二种方式,比较灵活又不容易出问题。

标签:std,cout,符号,作用域,int,深入,命名,using
From: https://blog.csdn.net/catandrabbit/article/details/144562187

相关文章

  • 深入理解C语言和C++中struct的区别
    大家好!我是兔飞飞!今天学习struct结构体,主要从c语言和c++的对比出发,这样更好辨析,应该大部分人都是先学c语言,再学的c++?1.C中struct的特点在C中,struct主要是用来定义一个包含多个数据成员的数据结构。结构体在C中只能包含数据成员,而不能包含函数。以下是C中struct......
  • 【深入STL:C++容器与算法】深度解析string类的使用
    文章目录1️⃣什么是stringstring的设计以及编码问题2️⃣string的重要接口......
  • 深入解析:Nginx通过一个域名配置多个HTTPS项目的实现与优化
    目录引言Nginx基础知识什么是NginxNginx的核心功能多项目部署的需求分析实现一个域名配置多个项目准备工作配置HTTPS的基本步骤配置多个项目的两种方式Nginx配置文件详解基于路径区分项目基于子域名区分项目HTTPS配置中的注意事项证书生成与管理多项目使用单一证书......
  • 深入浅出之python基础知识
    #!/usr/bin/python#-*-coding:UTF-8-*-forletterin'Python':#第一个实例ifletter=='h':breakprint'当前字母:',lettervar=10#第二个实例whilevar>0:print'......
  • 从底层源码深入分析Bean的实例化
    生命周期的整体流程Spring容器可以管理singleton作用域Bean的生命周期,在此作用域下,Spring能够精确地知道该Bean何时被创建,何时初始化完成,以及何时被销毁。而对于prototype作用域的Bean,Spring只负责创建,当容器创建了Bean的实例后,Bean的实例就交给客户端代码......
  • [深入探讨 Google Cloud SQL for PostgreSQL 的使用:Langchain 集成]
    文章目录概要整体架构流程技术名词解释技术细节小结概要提示:这里可以添加技术概要例如:openAI的GPT大模型的发展历程。整体架构流程提示:这里可以添加技术整体架构例如:在语言模型中,编码器和解码器都是由一个个的Transformer组件拼接在一起形成的。技术......
  • 深入理解华为鸿蒙的 Context
    深入理解华为鸿蒙的Context一、引言在华为鸿蒙操作系统里,Context是极为关键的概念。它如同应用运行的信息中心,为应用提供环境信息、资源访问途径以及与系统交互的接口,对构建优质鸿蒙应用至关重要。二、Context的基本概念与作用(一)定义与核心功能Context代表应用运行的上下......
  • 容器化技术全面解析:Docker 与 Containerd 的深入解读
    目录Docker简介1.什么是Docker?2.Docker的核心组件3.Docker的主要功能4.Docker的优点5.Docker的使用场景Containerd简介1.什么是Containerd?2.Containerd的核心特性3.Containerd的架构4.Containerd与Docker的关系5.Containerd的优点6.Con......
  • 教你成为学霸第一期——深入了解C / C++ / Python / Java 语言的优势与劣势
     给我一点时间,我可以将你从小白变成资深学霸目录C语言一、优势(一)高效性与速度(二)简洁性与灵活性(三)可移植性(四)丰富的库支持二、劣势(一)复杂的语法和指针操作(二)缺乏现代编程特性(三)内存管理手动性(四)开发效率相对较低C++语言一、优势(一)面向对象编程特性(二)高效性......
  • 深入解析1688详情API接口概念(1688.item get)商品上货
    一、1688详情API接口概念1688详情API接口(1688.itemget)是一种编程接口,它允许开发者通过特定的请求方式获取1688平台上商品的详细信息。这个接口就像是一个数据通道,开发者可以利用它从1688的庞大商品数据库中提取所需的数据,以便进行各种应用的开发。二、1688.item......