在 C++ 中,两个冒号 (::) 是范围解析运算符(Scope Resolution Operator)。它用于指明一个特定的范围,通常是用于区分不同作用域中的同名符号(如变量、函数、类等)。

主要用途

  1. 访问类的成员
    当定义一个类的成员函数时,范围解析运算符用于指定该函数属于哪个类。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MyClass {
    public:
    void display(); // 函数声明
    };

    // 使用范围解析运算符定义成员函数
    void MyClass::display() {
    std::cout << "This is a member function of MyClass." << std::endl;
    }

    在这个例子中,MyClass::display 指明了 displayMyClass 类的成员函数。

  2. 全局作用域访问
    在 C++ 中,如果局部变量的名字与全局变量相同,范围解析运算符可以用于访问全局变量。

    1
    2
    3
    4
    5
    6
    7
    8
    int value = 10; // 全局变量

    int main() {
    int value = 20; // 局部变量
    std::cout << "Local value: " << value << std::endl; // 输出:Local value: 20
    std::cout << "Global value: " << ::value << std::endl; // 输出:Global value: 10
    return 0;
    }

    在此例中,::value 用于访问全局作用域中的变量 value

  3. 访问命名空间中的成员
    C++ 使用命名空间来组织代码并避免命名冲突。范围解析运算符用于访问命名空间中的成员。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    namespace MyNamespace {
    void myFunction() {
    std::cout << "Function inside MyNamespace." << std::endl;
    }
    }

    int main() {
    // 使用范围解析运算符访问命名空间成员
    MyNamespace::myFunction(); // 输出:Function inside MyNamespace.
    return 0;
    }

    在这个例子中,MyNamespace::myFunction 指定 myFunctionMyNamespace 命名空间中的函数。

  4. 访问枚举的成员
    如果枚举的成员名在当前作用域中可能会引起混淆,范围解析运算符也可用于指明它属于哪个枚举类型。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    enum Color {
    RED,
    GREEN,
    BLUE
    };

    int main() {
    Color myColor = Color::RED; // 使用范围解析符访问枚举成员
    return 0;
    }

    在这里,Color::RED 明确表示 REDColor 枚举的成员。

总结

  • :: 是范围解析运算符,用于指明所属的类、命名空间或全局作用域。
  • 它帮助区分不同作用域中的同名符号,并在类成员定义、全局变量访问、命名空间成员访问、枚举成员访问等方面起到重要作用。