C++中使用命名空间加作用域解析符::指定该变量

2018-09-20 17:08:55 来源: 电子技术应用ChinaAET
标签:

命名空间主要解决命名冲突的问题。命名空间可以存放类、对象、函数、变量、结构体等。假如要使用命名空间中的变量或者对象,那么使用using namespace来指定某个命名空间,释放该命名空间中所有的变量或对象等。如果不想将它们全部从命名空间中释放出来,而是只使用该空间中某个特定的变量,那么使用命名空间加作用域解析符::指定该变量。如:

 

#include<iostream>
using namespace std;              //  释放std命名空间所有变量、函数等
namespace people
{
    char name[10]="Jack";
}
int main()
{
    cout << "name:" << people::name << endl;
    getchar();                   //  等待键盘输入字符
    return 0;
}


关于全局变量和局部变量的使用,如:

 

#include<iostream>
using namespace std;
int x = 1;          //  定义一个int型的全局变量x
int main()
{
    int x = 2;      //  定义一个int型的局部变量x
    cout << "输出全局变量:x=" << ::x << endl;  //  引用全局变量时使用作用域解析符::
    cout << "输出局部变量:x=" << x << endl;
    getchar();      //  等待键盘输入字符
    return 0;
}


创建命名空间时需要注意一些细节:

 

(1)同一个命名空间可以多次重复创建,以扩充命名空间的内容。

 

#include<iostream>
using namespace std;
namespace people
{
    char name[10] = "Jack";
}
namespace people
{
    int age = 18;
}
int main()
{
    cout << "name:" << people::name << endl;
    cout << "age:" << people::age << endl;
    getchar();      //  等待键盘输入字符
    return 0;
}


(2)尽量在命名空间之外定义函数,命名空间内只做函数声明。这样做有两个好处:第一,保持命名空间的整洁性;第二,有利于将命名空间专门存放于头文件中,而将函数的定义部分存放于实现文件中。

 

#include<iostream>
using namespace std;
namespace func
{
    void display();
}
int main()
{
    func::display();
    getchar();
    return 0;
}
void func::display()
{
    cout << "hello C++!!!" << endl;
}


(3)命名空间中的成员都是公有的,不能将它们私有化。并且只能以创建命名空间的方式添加新成员,而不能像定义对象或使用限定符的方式定义新成员。以下几种情况是错误:

 

namespace func
{
    private:
        void display(){cout << "Hello OpenCV" << endl;}
}
func x;
int func::x;


(4)一个命名空间可以嵌套在另一个命名空间。

 

如果只是想释放命名空间中的某些变量,可以这么做:

 

#include<iostream>
using namespace std;
namespace num1
{
    int x = 10;
    int y = 20;
}
namespace num2
{
    int x = 30;
    int y = 40;
}
int main()
{
    using num1::x;
    using num2::y;
    cout << "x=" << x << " y=" << y << endl;
    getchar();
    return 0;
}


可以为命名空间取个别名,如:

 

namespace people
{
    char name[10] = "Jack";
}
namespace person = people;

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
一文读懂Python数据类(下)
一文读懂Python数据类(下)

这是 Python 最新的 Dataclasses 系列的第二部分内容。在第一部分里,我介绍了 dataclasses 的一般用法。这篇博客主要介绍另一个特征:dataclasses.field。

2018年菲尔兹奖获奖名单公布,膜拜这些数学大神
2018年菲尔兹奖获奖名单公布,膜拜这些数学大神

2018年国际数学家大会于8月1日正式开幕,作为今年数学圈内最受关注的菲尔兹奖获奖者也正式揭晓。

程序员学习就像练功,基础打牢后百变不离其宗

有年轻的朋友问我:学习编程难不难?这个问题真难回答。因为编程的概念太广泛了,不同的需求层面要求确实不一样。如果只是干份工作,赚一份薪水养家户口,根本不是难事。甚至学历都不需要,只要你的逻辑能力尚可,认识ASCII码和二十几个C的关键字就可以。年轻人如果想学习是好事情,一般情况我以鼓励为主。

赛灵思推出面向OpenCL、C和C++的2015.1版本SDAccel开发环境

赛灵思公司近日宣布推出面向OpenCL、C和C++的2015.1版本SDAccel开发环境。SDAccel是面向系统和软件工程师而打造的SDx系列开发环境成员之一,可将利用FPGA实现数据中心应用加速的性能功耗比提升高达25倍之多。

程序员“趣“事一箩筐 | 一个任务,可以从第二项开始做

朋友邀请我写一本技术应用的小册子,用以提供给刚进入公司的应届毕业短期学习使用。因为我以前在单位做过类似的工作,所以他提出来我也不太好意思拒绝,只好硬着头皮答应了。按照他的理解将过去的资料整理一下就可以用了,不巧的是我原来的硬盘坏了,恰巧要换笔记本,所以问题一下子变得复杂起来了。

更多资讯
从FPGA到ACAP,“万能芯片” 的华丽转身
从FPGA到ACAP,“万能芯片” 的华丽转身

FPGA被誉为“万能芯片”,能量就只有这么一点?当然不是的,目前FPGA在数据中心领域已经得到认可,加速卡解决方案成为数据中心的首选。而人工智能通过深度学习算法在认知智能和推理智能上遇到难题,擅长推理的FPGA被寄予厚望。

《深度强化学习》手稿开放

一年前,机器之心发布了加拿大阿尔伯塔大学计算机系博士 Yuxi Li 的深度强化学习综述论文,该论文概述了在深度强化学习(Deep Reinforcement Learning)方面喜人的进展。而这本刚上线的《深度强化学习》手稿对前面的版本《深度强化学习综述》做了大规模的改进;从一年多前的 70 页扩充到现在的 150 页。

GICv3架构中,对中断的分组解析

GICv3架构中,对中断进行了分组。分成了以下三个组

想要学好大数据需掌握这十二大技术

大数据是对海量数据进行存储、计算、统计、分析处理的一系列处理手段,处理的数据量通常是TB级,甚至是PB或EB级的数据,这是传统数据处理手段所无法完成的,其涉及的技术有分布式计算、高并发处理、高可用处理、集群、实时性计算等,汇集了当前IT领域热门流行的IT技术。

基于SRAM工艺FPGA的保密性问题

在现代电子系统设计中,由于可编程逻辑器件的卓越性能、灵活方便的可升级特性,而得到了广泛的应用。

Moore8直播课堂