C++的双冒号

scorlw 发布于

C++的双冒号::

c++

“::”在C++中表示作用域和所属关系。”::”是运算符中等级最高的,它分为三种,分别如下:

一、作用域符号:

作用域符号”::“的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分。

例如:A,B表示两个类,在A,B中都有成员member。

那么:

1、A::member就表示类A中的成员member。

2、B::member就表示类B中的成员member。

二、全局作用域符号:

全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MinStack {
public:
stack<long long> data, min_d;

MinStack() {
min_d.push((long long)1 << 40);
}

void push(int x) {
data.push(x);
min_d.push(::min(min_d.top(), (long long)x));//::min因为类里面有一个min函数,直接使用min的话会调用类中的函数,加上::后调用的是全局的min函数。
}

int min() {
return min_d.top();
}
};

三、作用域分解运算符:

::是C++里的作用域分解运算符,“比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class CA{
public:
int ca_var;
int add(int a, int b);
int add(int a);
};
//那么在实现这个函数时,必须这样书写
int CA::add(int a, int b)
{
return a + b;
}
//另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如:
int CA::add(int a)
{
return a + ::ca_var;//表示当前实例中的变量ca_var
}