双冒号(::)和单冒号(:)在 C++ 中的含义和作用
目录
一、双冒号(::)在C++中的含义和作用
二、单冒号(:)在C++中的含义和作用
双冒号(::)和单冒号(:)在 C++ 中都是特殊符号,它们具有不同的含义和作用。
一、双冒号(::)在C++中的含义和作用
双冒号(::)是 C++ 中的作用域解析符,用于在类作用域中指明变量、函数或类的作用域。双冒号左侧可以是类、命名空间或枚举类型,右侧可以是类的静态成员、命名空间的成员或全局变量/函数。使用双冒号可以在类的作用域内指定使用全局变量或函数,或者指定调用其他命名空间或父类的成员,如下面的示例:
namespace MyNamespace {int myInt = 1;void myFunction() {}
}class MyClass {
public:static int myStaticInt;void myMethod() {// 使用双冒号指定调用 MyNamespace 命名空间的 myFunction 函数MyNamespace::myFunction();// 使用双冒号指定访问 MyNamespace 命名空间的 myInt 变量int x = MyNamespace::myInt;}
};// 使用双冒号指定定义 MyClass 的静态成员 myStaticInt
int MyClass::myStaticInt = 0;// 使用双冒号指定访问 MyClass 的静态成员 myStaticInt
int x = MyClass::myStaticInt;
1.命名空间作用域分辨符号。当需要使用命名空间中的某个成员时,可以使用双冒号来表示该成员所在的命名空间,如下所示:
namespace my_namespace {int my_variable = 123;
}// 在其他地方使用 my_namespace 中的 my_variable
std::cout << my_namespace::my_variable << std::endl;
在上面的代码中,my_namespace::my_variable
使用了双冒号来表示my_variable
是my_namespace
命名空间中的成员。
2.表示作用域限定符。当需要在类的定义中使用外部的全局变量或函数时,可以使用双冒号来表示该变量或函数的作用域,如下所示:
int a = 123; // 全局变量class MyClass {
public:void my_method() {std::cout << "a = " << a << std::endl; // 错误,a 不在 MyClass 的作用域中std::cout << "a = " << ::a << std::endl; // 正确,使用全局作用域中的 a}
};
在上面的代码中,::a
使用双冒号来表示a
是全局作用域中的变量。
3.嵌套类或命名空间的限定符。当需要使用嵌套类或命名空间中的成员时,可以使用双冒号来表示该成员所在的嵌套层次,如下所示:
class MyClass {
public:class NestedClass {public:void nested_method() {std::cout << "NestedClass::nested_method()" << std::endl;}};
};int main() {MyClass::NestedClass nested_obj;nested_obj.nested_method(); // 调用嵌套类中的成员函数return 0;
}
在上面的代码中,MyClass::NestedClass
使用双冒号来表示NestedClass
是MyClass
中的嵌套类。
需要注意的是,双冒号表示命名空间作用域分辨符号、作用域限定符和嵌套类或命名空间的限定符的具体语法规则取决于上下文环境,需要根据语境进行理解和区分。
二、单冒号(:)在C++中的含义和作用
在C++中,单冒号(:
)可以有多种用途,包括:
1.表示继承关系。在类的定义中,使用单冒号可以声明当前类的父类,如下所示:
class DerivedClass : public BaseClass {// ...
};
2.表示成员初始化。在类的构造函数中,使用单冒号可以对当前对象的成员进行初始化,如下所示:
class MyClass {
public:MyClass(int n, double d) : num(n), dbl(d) {}
private:int num;double dbl;
};
在上面的代码中,构造函数的参数n
和d
分别初始化了num
和dbl
两个成员变量。
3.表示命名空间的作用域分辨符号。如std::cout
中的双冒号用来指示cout
是std
命名空间中的成员,而不是其他命名空间的成员。
4.在条件编译中,#define
命令可以使用单冒号来定义宏函数。例如:
#define MIN(x, y) ((x) < (y) ? (x) : (y))
它将MIN(x, y)
定义为一个宏函数,返回x
和y
中的最小值。
需要注意的是,单冒号表示继承、成员初始化和命名空间作用域分辨符号的具体语法规则取决于上下文环境,需要根据语境进行理解和区分。
双冒号(::)和单冒号(:)在 C++ 中的含义和作用相关推荐
- html语言中的双冒号,::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用...
标题:::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用? 相关知识点: 单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素.(伪元素由双冒号和伪 ...
- ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用?
::before 和 :after中双冒号和单冒号的区别以及2个伪元素的作用 ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用 实例 实例 ::before 和 ...
- html中两个冒号,css中双冒号和单冒号区别
:--是指的伪类 ::--是指的伪元素 1.字面意思: 伪类,1.css中有类选择器,某些元素并未定义类名,就可以通过伪类赋予样式,如:[:nth-child(n)]:2.伪类可以应用于元素执行某种状 ...
- html语言中的双冒号,css单冒号和双冒号用法和区别
最近突然被别人问起css单冒号和双冒号有什么区别,答曰:"不知道". 虽然还在填坑中,但作为一个跨过了初级的FEer,感觉着实汗颜,刚好今天下午在搜别的问题的时候,突然看到一个对比 ...
- ::before 和::after 中双冒号和单冒号有什么区别、作 用
1.区别 在 CSS 中伪类一直用 : 表示,如 :hover, :active 等 伪元素在 CSS1 中已存在,当时语法是用 : 表示,如 :before 和 :after 后来在 CSS3 中修 ...
- C++双冒号和单冒号的用法区别
一.单冒号(:) 1.用作位域标号 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空 ...
- c++学习之——双冒号和单冒号的用法
C++里面双冒号和冒号及点号引用符的用法与区别 一.用双冒号的地方 1.在类外定义函数的时候,要用到void ClassName::FuntionName(pram){} 例如:声明了一个类A,类A里 ...
- numpy数组(无冒号,单冒号,双冒号)的含义
import numpy >>> a = numpy.array([[1,2,3,4,5],[6,7,8,9,10],[1,2,3,4,5],[6,7,8,9,10]]) >& ...
- 对makefile中:单冒号普通规则和::双冒号规则的理解 -转
原文地址:对makefile中:单冒号普通规则和::双冒号规则的理解 作者:gliethttp luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c. ...
最新文章
- ad20如何导入库_一文看懂如何使用(Py)Stan进行贝叶斯推理
- MySQL基本操作及乱码问题的解决方法
- mysql 中报1062_mysql error 1062 问题解决
- swarm 本地管理远程_带有WildFly Swarm的远程JMS
- mysql 关联查询_mysql数据库调优(二)
- python词云分析难吗_Python 词云分析周杰伦《晴天》
- php 性能日志,php性能分析之php-fpm慢执行日志slow log用法浅析
- 好用的文本编辑器推荐
- vue 基于网易云API实现二维码的登录
- 单片机c语言实习报告,单片机实习心得
- WPF 做的天干地支 乾坤八卦时钟表盘 可以设置24小时制
- 杨帅浙江大学计算机,诚邀校友见证杭州校友会注册成立(非活动帖)
- 计算机显示 亮度怎么调整,电脑屏幕亮度调整一直显示怎么办
- 不停机与停机更新_Kubernetes的零停机滚动更新
- Re:从0开始的微服务架构:(一)重识微服务架构
- 洛谷 P1873 砍树 (二分答案)
- LA 4043 Ants 二分图完美匹配
- 用html+css做一个网页设计
- 关于抽象类说法以下哪些是正确的?
- 生产环境kubeadm部署k8s(1.23)高可用集群