为什么C ++需要范围解析运算符?

::(作用域分辨率)运算符用于获取由于变量作用域而导致的隐藏名称,以便您仍可以使用它们。范围解析运算符可以用作一元和二进制。

如果命名空间作用域或全局作用域名称被块或类中的相同名称的显式声明隐藏,则可以使用一元作用域运算符。例如,如果您有一个名为my_var的全局变量和一个名为my_var的局部变量,则要访问全局my_var,则需要使用作用域解析运算符。例如,

示例

#include <iostream>  
using namespace std;  
int my_var = 0;
int main(void) {
   int my_var = 0;
   ::my_var = 1;  // set global my_var to 1
   my_var = 2;    // set local my_var to 2
   cout << ::my_var << ", " << my_var;
   return 0;
}

输出结果

这将给出输出-

1, 2

在主函数中声明的my_var声明隐藏了在全局命名空间范围中声明的名为my_var的整数。语句:: my_var = 1访问在全局命名空间范围中声明的名为my_var的变量。

您还可以使用范围解析运算符来使用类名称或类成员名称。如果隐藏了类成员名称,则可以在其成员名称前加上类作用域和运算符来使用它。例如,

示例

#include <iostream>
using namespace std;
class X {
   public:
   static int count;
};
int X::count = 10;    // define static data member
int main () {
   int X = 0;       // hides class type X
   cout << X::count << endl;     // use static member of class X
}

输出结果

这将给出输出-

10