命名空间 using 和 using namespace 使用详解_无敌小峰哥的博客-程序员秘密

技术标签: C++  命名空间  using namespace  

命名空间 using 和 using namespace 使用详解

阅读前须知:
注:本文中所说的属性泛指 类,函数,变量。

1.using namespace 使用命名空间(命名空间内属性直接使用,范围)

使用形式:using namespace + 命名空间名;
详见下面代码分析:

#include<iostream>

namespace A{
    
    void A1(){
     std::cout << "我是A1" << std::endl; };
    class B{
    
    public:
        static void B1(){
     std::cout << "我是B1"<<std::endl; };
        void B2(){
     std::cout << "我是B2" << std::endl; };
    };
    namespace C{
        
        void C1(){
     std::cout << "我是C1" << std::endl; };
    }
}

int main(){
    
    using namespace A; //可访问命名空间A下的所有属性
    //访问A1
    A1();
    //访问B1,B2
    B::B1();
    //B::B2();  //error,不可访问,B2不是B类的静态函数,需先创建B类对象,再调用B2;
    //访问C1
    C::C1();
    //C1();   //error  
    using namespace A::C; //可访问命名空间B下的所有属性
    C1();
    std::cin.get(); 
}

2.using 使用命名空间下的某一个属性(特指)

使用形式:using + 命名空间名 :: 属性;
详见下面代码分析:

#include<iostream>
namespace A{
    
    void A1(){
     std::cout << "我是A1" << std::endl; };
    class B{
    
    public:
        static void B1(){
     std::cout << "我是B1"<<std::endl; };
        void B2(){
     std::cout << "我是B2" << std::endl; };
    };
    namespace C{
        
        void C1(){
     std::cout << "我是C1" << std::endl; };
    }
}
int main(){
        
    //访问A1
    using  A::A1;
    A1();
    //访问B1,B2
    using A::B;
    B::B1();
    //B::B2();  //error,不可访问,B2不是B类的静态函数,需先创建B类对象,再调用B2;
    //访问C1
    using A::C::C1;
    C1();     
    std::cin.get(); 
}

注:

1. using A::C::C1 ;其中A,C一定是命名空间名,C1一定是属性。(使用using必须以属性结尾,其它必须是命名空间名)
2. using namespace A ;A一定是命名空间名。

友情提示:不管使用using 还是using namespace 都最好限定其使用的范围。你应参考以下几点。
1.不把using 或 using namespace放在全局空间内;
2.尽量放入函数体内,代码块内;
3.不使用using 和 using namespace (代码更加清晰)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014140383/article/details/87615623

智能推荐

异常控制流学习笔记——fork函数和wait函数_Lunapius的博客-程序员资料_fork wait

初步理解异常控制流中调用fork函数和wait函数的错误处理在计算机系统中,异常有中断、陷阱、故障和终止四种类别,具体的内容我们不在此处展开,但是无论如何,当异常出现时,计算机系统都会对其进行处理, 其大致流程如下图所示:作为初学者,我们平常练习时所编写的代码其实是极为朴素简单的,在代码中加入进行错误处理也不会导致程序难以阅读。但实际上,我们日常生活、工作生产中使用的大部分程序其实都是非常复杂的。当Unix系统级函数遇到错误时,它们通常会返回-1,并设置全局整数变量errno来表示什么出错了。程序员

SonarQube 安装、配置及 JaCoCo、Maven 集成_Tester_muller的博客-程序员资料_sonar 配置jacoco

Sonar 实际上是一个 Web 系统,展现了静态代码扫描的结果,结果是可以自定义的,而真正实现代码扫描的是 Sonar Scanner 这个工具,另外同时支持多种语言的原理是它的扩展性,通过插件实现的,也就是 Java Jar 架包,可以在 Sonar 平台上在线安装或者离线安装。比较常用的为 Gradle 和 Maven。3.已安装 MySQ L数据库(Sonar 默认的数据库是自带 H2 数据库,是很小的嵌入式数据库引擎,这里的配置换成了 MySQL,为了方便通过数据库客户端进行数据查询)

WPF学习之深入浅出话模板_星火燎猿的博客-程序员资料

图形用户界面应用程序较之控制台界面应用程序最大的好处就是界面友好、数据显示直观。CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据以文本、列表、图形等多种形式立体显示。用户体验在GUI程序设计中起着举足轻重的作用-----用户界面设计成什么样看上去才足够的漂亮?控件如何安排才简单易用并且少犯错误?这些都是设计师需要考虑的问题。WPF系统不但支持传统的Winfrom编程的用户界面和用

【数论-Lucas定理】_MatrixYg的博客-程序员资料_lucas定理

1.写在前面:我始终觉得,对于一个问题要知其然,更要知其所以然。Lucas定理在刚刚接触数论的时候就知道了,因为这是一个很常用的定理,常常和中国剩余定理放在一起考。最近在组合数学上出现了很多问题,但是都是找个结论就过去了。浑浑噩噩并不懂其中原理,感觉自己的数学直觉一直在下降,以前我甚至能够从数据中看出来数学表达式,后来学了很多的工具,就变懒了,甚至连一个稍微复杂一点的积分都懒得动手,直接自适应Si...

OpenCV ARM移植(交叉编译opencv) arm-oe-linux-gnueabi-gcc编译opencv3.1.0_围观岳老师的博客-程序员资料_arm-oe-linux-gnueabi-gcc 安装

Cmake的安装OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake。ubuntu下安装cmake比较简单,apt-get install cmake如果觉得自带的版本不符合要求,可以下载安装包。下载最新版的安装包:http://www.cmake.org/cmake/resources/software.html

CREATE TABLE 表名 AS SELECT 语句用法详解_xuehongyou的博客-程序员资料_as select

这里写自定义目录标题新表不存在,创建新表新表已经存在新表不存在,创建新表1.创建新表并且携带数据create table new_table as select * from exist_table2.创建新表不携带数据create table new_table as select * from exist_table where 1=2注意:复制只会复制表的结构和数据,原始表中的索引,主键等都不会复制。新表已经存在1.全量复制旧表

随便推点

《SQL Server 2005实现与维护》之 配置SQL Server 2005_weixin_30664615的博客-程序员资料

一 .配置日志文件和数据文件1. 数据文件分为两种:主数据文件(.mdf):包含数据库目录的启动信息,并且指向其他数据库文件。次数据文件(.ndf):可选的并且是用户定义的,它包含对象和用户数据。通常这样使用他们:将数据库目录存放在主要文件上,将所有的数据和对象存储在次要文件上。2. 数据文件可以分组,称为文件组。通常支持两种文件组:主要文...

计算机专业社会实践报告1500字,计算机专业社会实践报告范文3000字_weixin_39807541的博客-程序员资料

3.每一份影像拷贝(TitleCopy)都有各自的编号Id,同一个影像的若干拷贝编号不同,但是不同的影像拷贝的编号可能会重复。必须记录下是否已经出租,以便于店员随时能够查询拷贝资料的当前状态(status)。4.系统中允许会员预定某项影像资料,但必须提前预约租赁时间(res_date)。5.每一项出租事项需要记录下来(租借日期book_date,实际归还日期act_ret_date,过期时间(ex...

SDDCN架构下的DC内部负载均衡策略-ECMP_cheer1994的博客-程序员资料

云计算中数据中心内部负载均衡策略ECMP背景数据中心的内部网络拓扑通常采用的是Leaf-Spine结构(也称CLOT结构)。这种结构区别于传统的3-Tier结构,任意主机之间两跳可达。主机之间常常存在多条路径。数据中心为了满足吞吐量敏感型流量的需求会提供大量带宽资源。利用SDN控制器对全局网络拓扑感知、路径组员、带宽资源丰富的特性,可以更好的实现负载均衡,将数据流分不到不同路径上进行数据传输,...

IP协议分析、浮动路由、VLAN与TRUNK配置_我们好像在哪见过 t的博客-程序员资料

IP协议分析、浮动路由、VLAN与TRUNK配置一、IP协议分析一、IP协议1.TTL(8)time to live生存时间,单位为跳数,作用是防止数据包在网络中永久的循环。TTL范围:1-255。windows系统TTL一般为128。linu系统一般为1-128之间,如56,64。通过ping网站可以看到其服务器TTL,判断其系统类型。2.协议号(8)作用是区分上层协议。...

Flutter插件开发-电子白板插件-开源项目_亢少军的博客-程序员资料_electron flutter

防采集标记:亢少军老师的课程和资料flutter_touchvga flutter whiteboard plugin.Usagegit clone https://github.com/kangshaojun/flutter_touchvg.gitcd flutter_touchvgflutter packages getflutter runscreenshotsiOS...

【郭林专刊】多个js技巧代码 ._云哥中国的博客-程序员资料

1.文本框焦点问题onBlur:当失去输入焦点后产生该事件onFocus:当输入获得焦点后,产生该文件Onchange:当文字值改变时,产生该事件Onselect:当文字加亮后,产生该文件(value=='') {value='mm'}">点击时文字消失,

推荐文章

热门文章

相关标签