深入解析C++编程中范围解析运算符的作用及使用
范围解析运算符 :: 用于标识和消除在不同范围内使用的标识符。
语法
:: identifier class-name :: identifier namespace :: identifier enum class :: identifier enum struct :: identifier
备注identifier 可以是变量、函数或枚举值。
具有命名空间和类以下示例显示范围解析运算符如何与命名空间和类一起使用:
namespace NamespaceA{
int x;
class ClassA {
public:
int x;
};
}
int main() {
// A namespace name used to disambiguate
NamespaceA::x = 1;
// A class name used to disambiguate
NamespaceA::ClassA a1;
a1.x = 2;
}
没有范围限定符的范围解析运算符表示全局命名空间。
namespace NamespaceA{
int x;
}
int x;
int main() {
int x;
// the x in main()
x = 0;
// The x in the global namespace
::x = 1;
// The x in the A namespace
NamespaceA::x = 2;
}
你可以使用范围解析运算符来标识命名空间的成员,还可标识通过 using 指定成员的命名空间的命名空间。在下面的示例中,你可以使用 NamespaceC 限定 ClassB(尽管 ClassB 已在 NamespaceB 中声明),因为已通过 using 指令在 NamespaceC 中指定 NamespaceB。
namespace NamespaceB {
class ClassB {
public:
int x;
};
}
namespace NamespaceC{
using namespace B;
}
int main() {
NamespaceB::ClassB c_b;
NamespaceC::ClassB c_c;
c_b.x = 3;
c_c.x = 4;
}
可使用范围解析运算符链。在以下示例中,NamespaceD::NamespaceD1 将标识嵌套的命名空间 NamespaceD1,并且 NamespaceE::ClassE::ClassE1 将标识嵌套的类 ClassE1。
namespace NamespaceD{
namespace NamespaceD1{
int x;
}
}
namespace NamespaceE{
class ClassE{
public:
class ClassE1{
public:
int x;
};
};
}
int main() {
NamespaceD:: NamespaceD1::x = 6;
NamespaceE::ClassE::ClassE1 e1;
e1.x = 7 ;
}
具有静态成员必须使用范围解析运算符来调用类的静态成员。
class ClassG {
public:
static int get_x() { return x;}
static int x;
};
int ClassG::x = 6;
int main() {
int gx1 = ClassG::x;
int gx2 = ClassG::get_x();
}
具有区分范围的枚举区分范围的解析运算符还可以与区分范围的枚举枚举声明的值一起使用,如下例所示:
enum class EnumA{
First,
Second,
Third
};
int main() {
EnumA enum_value = EnumA::First;
}
相关阅读:
JavaScript实现搜索框的自动完成功能(一)
php修改文件上传限制方法汇总
Win7系统传真扫描功能不能正常使用的解决方法
MySql安装与配置方法(MySQL添加用户、删除用户与授权)
简单讲解AngularJS的Routing路由的定义与使用
最新制作ThinkPHP3.2.3完全开发手册
android工程下不能运行java main程序的解决方法
如何关闭Windows10的推送通知 关闭win10推送图文教程
javascript中使用正则表达式实现删除字符串中的前后空格
详解C语言编程中的函数指针以及函数回调
mac系统中自带的邮件程序怎么添加qq邮箱帐号?
Win8.1系统提示无法验证产品密钥解决教程
android4.0混淆XmlPullParser报错原因分析解决
Ubuntu软件中心安装应用时出现Debconf窗口