C++面试基础系列-double_colon(::)

news2024/12/22 22:14:28

系列文章目录


文章目录

  • 系列文章目录
  • C++面试基础系列-double_colon(::)
    • Overview
    • 1.double_colon(::)关键点
    • 2.double_colon(::)使用示例
      • 2.1.访问类成员
      • 2.2.静态成员访问
      • 2.3.命名空间中的实体
      • 2.4.全局变量和函数
      • 2.5.友元类
      • 2.6.类型转换
      • 2.7.枚举类成员访问
      • 2.8.模板参数
    • 关于作者


C++面试基础系列-double_colon(:😃

Overview

  • 全局作用域符(::name):用于类型名称(类、类成员、成员函数、变量等)前,表示作用域为全局命名空间
  • 类作用域符(class::name):用于表示指定类型的作用域范围是具体某个类的
  • 命名空间作用域符(namespace::name):用于表示指定类型的作用域范围是具体某个命名空间的

1.double_colon(::)关键点

在C和C++中,双冒号 :: 被称为作用域解析运算符(scope resolution operator),但它在两种语言中的使用和含义略有不同:

  • C语言中的::
    • 在C语言中,:: 几乎不被使用,因为它主要用于指定全局作用域,而C语言中大部分变量和函数默认就是全局作用域的。不过,:: 可以用来明确指出全局变量或函数,尤其是在与静态成员函数一起使用时。
  • C++中的::
    • 在C++中,:: 的使用要普遍得多,因为它用于解决作用域的问题,尤其是在类(class)和命名空间(namespace)中。
    • 用于访问类的静态成员变量或静态成员函数:ClassName::staticMember。
    • 用于访问命名空间中的成员:NamespaceName::member。
    • 用于在类内部访问全局变量或函数,避免与局部变量或成员变量的名称冲突:::globalVariable。
    • 用于在派生类中访问基类的成员:BaseClassName::member。
  • 全局作用域:
    • 在C++中,如果需要明确指出某个实体属于全局作用域,可以使用 ::。例如,在一个函数内部,如果你想要访问全局变量,可以使用 ::globalVariable。
  • 类型转换:
    • 在C++中,:: 也用于类型转换,称为静态类型转换或类类型转换,例如 Type::pointer。
  • 模板参数:
    • 在C++模板编程中,:: 用于指定模板参数的命名空间或类作用域,例如 std::vector<int>
  • 匿名空间:
    • 在C++中,:: 还可以用于匿名命名空间,这是一种特殊的命名空间,它提供了文件内唯一的作用域。
  • C++11中的统一初始化:
  • 从C++11开始,:: 不再是统一初始化(Uniform Initialization)的一部分。统一初始化使用花括号 {} 而不是 ::。

总结来说,:: 在C++中是一个关键的运算符,用于处理作用域相关的问题,而在C语言中,由于作用域规则的不同,:: 的使用相对较少。

2.double_colon(::)使用示例

在C++中,双冒号 :: 是作用域解析运算符(scope resolution operator),用于明确指出我们访问的是特定作用域内的实体。以下是 :: 的一些主要用途和示例:

2.1.访问类成员

使用 :: 来访问类的成员变量和成员函数。

class MyClass {
public:
    int memberVar;
    void memberFunc() {
        // ...
    }
};

int main() {
    MyClass myObj;
    myObj.memberVar = 10; // 访问成员变量
    myObj.memberFunc();   // 访问成员函数
}

2.2.静态成员访问

使用 :: 来访问类的静态成员,因为静态成员不属于类的任何特定对象。

class MyClass {
public:
    static int staticMember;
};

int MyClass::staticMember = 20; // 定义静态成员

int main() {
    cout << MyClass::staticMember << endl; // 访问静态成员
}

2.3.命名空间中的实体

使用 :: 来访问命名空间中的实体。

namespace MyNamespace {
    int myVar = 5;
}

int main() {
    cout << MyNamespace::myVar << endl; // 访问命名空间中的变量
}

2.4.全局变量和函数

在局部作用域中,使用 :: 来访问全局变量和函数。

int globalVar = 10;

void globalFunc() {
    // ...
}

int main() {
    int localVar = 5;
    ::globalVar = localVar; // 访问全局变量
    ::globalFunc();       // 调用全局函数
}

2.5.友元类

当一个类声明了另一个类为友元时,可以使用 :: 来访问友元类的私有或保护成员。

class FriendClass {
public:
    void friendFunc() {
        // ...
    }
};

class MyClass {
public:
    void accessFriend() {
        FriendClass::friendFunc(); // 访问友元类的成员函数
    }
};

2.6.类型转换

:: 也用于静态类型转换,即 static_cast。

class Base {
public:
    virtual void func() {
        // ...
    }
};

class Derived : public Base {
public:
    void func() override {
        // ...
    }
};

void func(Base* basePtr) {
    Derived* derivedPtr = static_cast<Derived*>(basePtr); // 类型转换
    derivedPtr->func();
}

2.7.枚举类成员访问

当枚举被定义在类中时,使用 :: 来访问枚举成员。

class MyClass {
public:
    enum MyEnum { A, B, C };
};

int main() {
    int value = MyClass::A; // 访问枚举成员
}

2.8.模板参数

使用 :: 来指定模板参数的命名空间或类作用域。

template <typename T>
void myFunc(T param) {
    // ...
}

int main() {
    myFunc<std::vector<int>>(10); // 使用 :: 指定模板参数的命名空间
}

:: 是C++中一个非常有用的运算符,它帮助我们明确地访问作用域内的实体,提高代码的可读性和清晰度。


关于作者

  • 本文作者:WeSiGJ
  • 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
  • GitHub:https://github.com/wesigj/CPLUSCPLUSBOYS
  • CSDN:https://blog.csdn.net/wesigj
  • 微博:
  • 微信公众号:WeSiGJ

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简述灰点工业相机的相关知识

灰点相机是一种特殊的相机类型&#xff0c;它的名称来源于其拍摄时可能产生的灰点效果&#xff0c;但并非所有灰点相机都会直接产生这种效果&#xff0c;这一命名更多是基于其品牌或某种特定的视觉特性。以下是对灰点相机的解析&#xff1a; 一、基本定义 类型&#xff1a;灰…

【Redis】Redis典型应用-缓存(cache)

目录 什么是缓存 使用Redis作为缓存 缓存的更新策略 缓存预热&#xff08;cache preheating&#xff09; 缓存穿透&#xff08;cache penetration&#xff09; 缓存雪崩&#xff08;cache avalanche&#xff09; 缓存击穿&#xff08;cache breakdown&#xff09; 什么是…

最小路径和[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个包含非负整数的m x n网格grid&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[…

四十一、【人工智能】【机器学习】- Bayesian Logistic Regression算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

分布式缓存———数据一致性问题

分布式基础理论 CAP理论 与 BASE理论-CSDN博客 分布式系统会的三座大山&#xff1a;NPC。 N&#xff1a;Network Delay&#xff0c;网络延迟P&#xff1a;Process Pause&#xff0c;进程暂停&#xff08;GC&#xff09;C&#xff1a;Clock Drift&#xff0c;时钟漂移 在当前…

汇昌联信科技做拼多多电商有哪些策略?

在当今竞争激烈的电商平台上&#xff0c;汇昌联信科技以其独到的策略成功立足拼多多。他们不仅凭借对市场的深刻理解&#xff0c;还通过一系列创新举措&#xff0c;实现了品牌的快速成长和市场份额的不断扩大。接下来&#xff0c;我们将深入探讨汇昌联信科技在拼多多平台上所采…

基于Python的火车票售票系统/基于django的火车购票系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

三节点 DMHS 级联同步搭建

一、环境配置 完成三节点数据库部署并初始化&#xff0c;配置参数如下&#xff1a; 节点 192.168.2.132 192.168.2.133 192.168.2.130 数据库版本 DM8 DM8 DM8 实例名 DM1 DM2 DM3 端口号 5236 5236 5236 数据文件路径 /home/dmdba/dmdata /home/dmdba/dmd…

【Hot100】LeetCode—19. 删除链表的倒数第 N 个结点

目录 1- 思路双指针 2- 实现⭐19. 删除链表的倒数第 N 个结点——题解思路 3- ACM 实现 原题连接&#xff1a;19. 删除链表的倒数第 N 个结点 1- 思路 双指针 定义 dummyHead 处理头结点情况slow 指针&#xff1a;初始化为 dummyHead 定位到被移除元素的前一个fast 指针&…

海外短剧系统开源代码+快速搭建部署指南

前言&#xff1a; 海外短剧系统是一个专门为海外观众设计和运营的内容平台。这个系统不仅包含了丰富的短剧资源&#xff0c;还提供了全面的技术支持和运营服务&#xff0c;以确保短剧内容能够顺利地面向全球观众传播。 一、市场背景 由于国内短剧市场的急剧增长&#xff0c;…

x64dbg: 用于Windows的开源二进制调试器

x64dbg是Windows的开源二进制调试器&#xff0c;专为恶意软件分析和可执行文件的逆向工程而设计&#xff0c;无需访问源代码。 它提供了广泛的功能和插件系统&#xff0c;允许您定制和扩展其功能以满足您的需求。 人们喜欢x64dbg的原因可能是它有一个UI&#xff0c;可以轻松地…

开源服务器运维工具1Panel

1Panel是杭州飞致云信息科技有限公司推出的一款现代化、开源的Linux服务器运维管理面板。 以下是对1Panel的详细介绍&#xff1a; 一、基本信息 产品名称&#xff1a;1Panel所属公司&#xff1a;杭州飞致云信息科技有限公司编写语言&#xff1a;Golang上线时间&#xff1a;20…

团队管理的五个基本原则

一个成功的团队不仅能够迅速响应市场变化&#xff0c;还能在激烈的竞争中保持持续的创新力和竞争力。为了实现这一目标&#xff0c;团队管理必须遵循以下五个基本原则&#xff1a; 1、信任为先 “用人不疑&#xff0c;疑人不用”是团队管理的首要原则。信任是团队合作的基石。…

海外最新趋势解读!美国IMS2024揭示了哪些连接器新技术?

2024年6月的IEEE MTT-S国际微波研讨会在华盛顿特区盛大开启&#xff0c;集结了全球射频行业的顶尖企业&#xff0c;展示了集成电路、传感器、连接器、电缆、光学和波导等多元化产品和技术。 作者 | David Shaff 编译 | 深圳市连接器行业协会 李亦平 在今年IMS2024活动中所展示…

C# x Unity面向对象补全计划 设计模式 之 实现一个简单的有限状态机

一个简单的有限状态机可以有如下内容 1.状态基类&#xff08;定义基本状态的方法&#xff0c;如进入&#xff08;Enter&#xff09;、执行&#xff08;Execute&#xff09;和退出&#xff08;Exit&#xff09;&#xff0c;同时可以在此声明需要被管理的对象&#xff09; 2.具体…

电动汽车是否将成为银的最大需求端?

近年来&#xff0c;工业对银的需求一直在激增。主要是由于太阳能面板制造商对银的大量需求&#xff0c;预计2023年的需求量将比前一年增长11%。预测者预计今年又会增长9%。 然而&#xff0c;对于银的投资者来说&#xff0c;未来制造商对银的需求前景甚至可能比最近的过去更加明…

使用Linux Systemd部署DotNet Quartz.Net定时任务

开发环境 Windows 10 WSL2Ubuntu 22.04DotNet 6Quartz.Net 代码实战 新建dotnet项目&#xff0c;添加引用Quartz.net包 入口程序&#xff1a; static void Main(string[] args){IConfiguration configuration new ConfigurationBuilder().SetBasePath(Directory.GetCurren…

苹果手机白屏是怎么回事?解决方法分享

苹果手机作为市场上最受欢迎的智能手机之一&#xff0c;其稳定性和流畅性一直备受用户赞誉。然而&#xff0c;偶尔我们也会遇到一些令人头疼的问题&#xff0c;比如苹果手机出现白屏无反应的情况。那么&#xff0c;苹果手机白屏到底是怎么回事呢&#xff1f;本文将为大家详细解…

[RCTF2019]draw

下载是一个文本文档&#xff0c;百度AI cs pu lt 90 fd 500 rt 90 pd fd 100 rt 90 repeat 18[fd 5 rt 10] lt 135 fd 50 lt 135 pu bk 100 pd setcolor pick [ red orange yellow green blue violet ] repeat 18[fd 5 rt 10] rt 90 fd 60 rt 90 bk 30 rt 90 fd 60 pu lt 90 f…