双冒号::标识作用域、所属关系
正常情况下,基本都是类名::成员函数
,如A::member()
.
但在实际使用时有一种情况,其前面没有类名,如leetcode的offer30题,其代码如下:
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
min_stack.push(INT32_MAX);
}
void push(int x) {
x_stack.push(x);
min_stack.push(::min(min_stack.top(), x));
}
void pop() {
x_stack.pop();
min_stack.pop();
}
int top() {
return x_stack.top();
}
int min() {
return min_stack.top();
}
private:
stack<int> min_stack;
stack<int> x_stack;
};
在void push()
函数中,调用min()函数求两个值的最小值时前面加了双冒号,这么做是因为在类MinStack
中也有一个成员函数min()
,为了区分这个函数与C++标准库的min函数,前面加了双冒号::
,表示这个min()
函数为全局的min()
函数。