📜  c++中的范围解析运算符(1)

📅  最后修改于: 2023-12-03 14:39:58.970000             🧑  作者: Mango

C++中的范围解析运算符

C++中的范围解析运算符(::)也称作作用域限定符,用于限定命名空间、类、结构体、枚举类型和变量等的作用范围。通过使用范围解析运算符,可以解决命名冲突和访问外部作用域中的变量或函数等问题。

命名空间

在C++中,命名空间是用来避免命名冲突的一种机制。如果不同的库或模块中存在相同名称的变量或函数等,使用范围解析运算符可以限定其作用域。

namespace MyNamespace {
    int a = 0;
    void func() {
        cout << "Hello World!" << endl;
    }
}

int main() {
    int a = 1;
    cout << MyNamespace::a << endl;
    MyNamespace::func();
    return 0;
}

输出结果为:

0
Hello World!

以上代码中,变量a和函数func都被定义在MyNamespace命名空间中。在main函数中,使用MyNamespace::a和MyNamespace::func()来访问对应的变量和函数。这样可以避免命名冲突。

类和结构体

范围解析运算符也可以限定类和结构体中的成员变量和成员函数。

#include <iostream>
using namespace std;

class Person {
    public:
        int age;
        void sayHello() {
            cout << "Hello World!" << endl;
        }
};

int main() {
    Person p;
    p.age = 18;
    cout << p.age << endl;
    p.sayHello();
    return 0;
}

输出结果为:

18
Hello World!

以上代码中,Person类包含成员变量age和成员函数sayHello。在main函数中,通过p对象以及范围解析运算符来访问对应的成员变量和成员函数。

枚举类型

使用范围解析运算符,可以定义和访问其他作用域中的枚举类型。

#include <iostream>
using namespace std;

namespace MyNamespace {
    enum Color {
        RED = 0,
        GREEN = 1,
        BLUE = 2
    };
}

int main() {
    MyNamespace::Color color = MyNamespace::GREEN;
    cout << color << endl;
    return 0;
}

输出结果为:

1

以上代码中,枚举类型Color被定义在MyNamespace命名空间中。在main函数中,使用MyNamespace::Color来定义color变量,并通过cout输出GREEN对应的值1。

变量

范围解析运算符也可以用于访问全局变量和局部变量。

#include <iostream>
using namespace std;

int a = 1;

int main() {
    int a = 2;
    cout << ::a << endl;
    cout << a << endl;
    return 0;
}

输出结果为:

1
2

以上代码中,全局变量a和局部变量a都被定义在程序中。在main函数中,使用::a来访问全局变量a的值,输出结果为1。没有使用范围解析运算符的a变量则是访问局部变量的值,输出结果为2。

总结

范围解析运算符(::)是C++中非常重要的一个运算符,可以用于限定命名空间、类、结构体、枚举类型和变量等的作用范围。通过使用范围解析运算符,可以解决命名冲突和访问外部作用域中的变量或函数等问题。