namespace for c++

namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。namespace允许像类,对象,函数聚集在一个名字下。本质上讲namespace是对全局作用域的细分。

我想大家都见过这样的程序吧:
hello_world.c
#include <iostream>
using namespace std;

int main()
{
    printf("hello world !");
    return 0;
}
我想很多人对namespace的了解也就这么多了
但是namespace远不止如此,让我们再多了解一下namespace

namespace的格式基本格式是
namespace identifier
{
    entities;
}
举个例子,
namespace exp
{
    int a,b;
}
有点类似于类,但完全是两种不同的类型。
为了在namespace外使用namespace内的变量我们使用::操作符,如下
exp::a
exp::b
使用namespace可以有效的避免重定义的问题
#include <iostream>
using namespace std;

namespace first
{
  int var = 5;
}

namespace second
{
  double var = 3.1416;
}

int main () {
  cout << first::var << endl;
  cout << second::var << endl;
  return 0;
}
结果是
5
3.1416
两个全局变量都是名字都是var,但是他们不在同一个namespace中所以没有冲突。

关键字using可以帮助从namespace中引入名字到当前的声明区域
#include <iostream>
using namespace std;

namespace first
{
  int x = 5;
  int y = 10;
}

namespace second
{
  double x = 3.1416;
  double y = 2.7183;
}

int main () {
  using first::x;
  using second::y;
  cout << x << endl;
  cout << y << endl;
  cout << first::y << endl;
  cout << second::x << endl;
  return 0;
}
输出是
5
2.7183
10
3.1416
就如我们所指定的第一个x是first::x,y是second.y

using也可以导入整个的namespace
#include <iostream>
using namespace std;

namespace first
{
  int x = 5;
  int y = 10;
}

namespace second
{
  double x = 3.1416;
  double y = 2.7183;
}

int main () {
  using namespace first;
  cout << x << endl;
  cout << y << endl;
  cout << second::x << endl;
  cout << second::y << endl;
  return 0;
}
输出是
5
10
3.1416
2.7183
正如我们所预见的导入的整个的first的namespace,前一对x,y的值就是first中的x,y的值。
这里我们不能在“using namespace first;“下加一句“using namespace second;“,为什么呢?
这样做无异于直接完全的忽视namespace first和namespace second,会出现重复定义的结果,所以前面的hello_world.c中的using指令的使用一定程度上存在问题的,只是因为我们就用了一个namspace,一旦引入了新的namespace这种做法很可能会出现重复定义的问题。

在头文件中,我们通常坚持使用显式的限定,并且仅将using指令局限在很小的作用域中,这样他们的效用就会受到限制并且易于使用。类似的例子有
#include <iostream>
using namespace std;

namespace first
{
  int x = 5;
}

namespace second
{
  double x = 3.1416;
}

int main () {
  {
    using namespace first;
    cout << x << endl;
  }
  {
    using namespace second;
    cout << x << endl;
  }
  return 0;
}
输出是
5
3.1416
可以看到两个不同的namespace都被限制在了不同作用域中了,他们之间就没有冲突。

namespace也支持嵌套
#include <iostream>

namespace first 
{
    int a=10;
    int b=20;

    namespace second
    {   
        double a=1.02;
        double b=5.002;
        void hello();
    }   

    void second::hello()
    {   
    std::cout <<"hello world"<<std::endl;
    }
}

int main()
{
    using namespace first;

    std::cout<<second::a<<std::endl;
    second::hello();
}
输出是
1.02
hello world
在namespace first中嵌套了namespace second,seond并不能直接使用,需要first来间接的使用。

namespace可以使用别名,在对一些名字比较长的namespace使用别名的话,是一件很惬意的事。但是与using相同,最好避免在头文件使用namespace的别名(f比first更容易产生冲突)。
namespace f = first;

最后,namespace提供了单独的作用域,它类似于静态全局声明的使用,可以使用未命名的namespace定义来实现:
namespace { int count = 0;}         //这里的count是唯一的
                                                //在程序的其它部分中count是有效的
void chg_cnt (int i) { count = i; } 

转载于:https://www.cnblogs.com/DarrenChan/p/6163735.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5显示字母的值,使用HTML5 Canvas API控制字体的显示与渲染的方法

今天我们开始征战一个全新的内容——HTML5 Canvas的文本API&#xff01;要知道&#xff0c;艺术家通常同时也是一个书法家&#xff0c;所以我们要学习写字&#xff0c;而且是写出漂亮的字。是不是很有意思&#xff1f;好了&#xff0c;先预告一下Canvas 文本API有哪些。属性描述…

简易商品购物车

<html><head> <title>商品购物车</title><meta charset"utf-8"><style type"text/css"> body{ margin:0; padding:0; font-size:12px; line-height:20px; color:#333; } ul,li,ol,h1,dl,dd{ list-style:none; margin:…

html5 客户端数据缓存机制,深入理解HTML5离线缓存机制

TML5提供了一种离线应用缓存机制&#xff0c;使得网页应用可以离线使用&#xff0c;这种机制在移动端浏览器上支持度非常广&#xff0c;所有版本的android和ios浏览器都能很好的支持。我们可以放心的使用该特性来加速移动端页面的访问速度。开启离线缓存的步骤也非常简单&#…

安卓手机上运行 PC-E500 程序

目录 第1章安卓手机上运行 PC-E500 程序 1 1 PockEmul 1 2 下载 1 3 打包BASIC程序 2 4 配置PC-E500模拟器 5 5 载入e500.pkm 7 6 载入40000.bin 8 7 解包 10 第1章安卓手机上运行 PC-E500 程序 1 PockEmul 安卓手机上运行PC-E500程序&#xff0c;需要…

2021安徽省高考成绩怎么查询系统,2021年安徽省教育招生考试院成绩查询登录入口...

一、2020年安徽高考成绩查询登录入口二、安徽高考成绩查询新闻资讯最新消息!安徽高考预计7月23日划定各批次录取线并公布高考成绩!7月14日上午&#xff0c;记者跟随省人大代表、省政协委员们一同走进安徽省教育招生考试院网评现场。“今年&#xff0c;我省高考的网上评卷工作继…

Java Web之网上购物系统(提交订单、查看我的订单)

作业终于做完了&#xff0c;好开心。。。。。。虽然这一周经历不是那么顺利&#xff0c;但是觉得还是收获了不少&#xff0c;有过想哭的冲动&#xff0c;代码不会写&#xff0c;事情办不好&#xff0c;各种发愁。空间里发小发了带父母出去游玩的照片&#xff0c;瞬间能量值不知…

河北大学计算机专业调剂,【计算机考研调剂】河北大学2021级硕士研究生预调剂信息统计的通知...

广大考生&#xff1a;根据河北大学2021年硕士研究生招生计划&#xff0c;我院拟招收校内外调剂考生&#xff0c;欢迎广大考生调剂到我院。调剂要求&#xff1a;1、按照学校要求&#xff0c;申报我院调剂考生&#xff0c;初试总成绩和单科成绩不低于教育部公布的《2021年全国硕士…

撸表情开发过程中使用腾讯云存储的接入实例分享

推荐一下一个有趣的表情包收集网站&#xff0c;也可以在线制作表情包&#xff0c;欢迎访问&#xff1a;撸表情 撸表情&#xff08;http://www.lubiaoqing.com&#xff09;这个网站是业余时间开发的一个网站&#xff0c;涉及到大量表情包的检索和存储&#xff0c;个人服务器肯定…

html路径详解,详解HTML相对路径和绝对路径

相对路径&#xff1a;以引用文件之网页所在位置为参考基础&#xff0c;而建立出的目录路径。因此&#xff0c;当保存于不同目录的网页引用同一个文件时&#xff0c;所使用的路径将不相同&#xff0c;故称之为相对。绝对路径&#xff1a;以Web站点根目录为参考基础的目录路径。之…

#65279导致页面顶部空白一行解决方法

今天做了两个静态html页面&#xff0c;在浏览器中测试的时候&#xff0c;发现其中一个html页面的顶部多出了些许空白&#xff0c;而另一个页面显示正常。在浏览器中进行了审查对比&#xff0c;发现有空白的那个页面的head标签里面的元素全部跑到了body里面&#xff0c;而且body…

计算机应用技术自我分析,计算机应用*个人自我鉴定

第1篇&#xff1a;计算机应用*个人自我鉴定时光匆匆溜走&#xff0c;短短三年的大学生活即将过去。在菁菁校园中&#xff0c;老师的教诲&#xff0c;同学的友爱以及各方面&#xff0c;使我获得了许多知识&#xff0c;懂得了许多道理。为了更好地适应社会的需要&#xff0c;我在…

怎么把桌面计算机放到快速启动栏,怎么把桌面图标放到快速启动栏

1. 如何把桌面图标放于快速启动栏拖动图标到任务栏&#xff0c;之后删除桌面图标不行的话点击“开始”菜单→“运行”命令&#xff0c;在弹出的“运行”对话框中输入 regsvr32 /n /i:u shell32 后回车&#xff0c;丢失的图标便又重新回到快速启动栏了再不行的话在Windows操作系…

html5 自适应手机布局,科技常识:html5移动端自适应布局的实现

今天小编跟大家讲解下有关html5移动端自适应布局的实现 &#xff0c;相信小伙伴们对这个话题应该有所关注吧&#xff0c;小编也收集到了有关html5移动端自适应布局的实现 的相关资料&#xff0c;希望小伙伴们看了有所帮助。场景&#xff1a;为适应各种大小的屏幕自适应布局我知…

js 两个map合并为一个map_ArcGIS API for JS3.x教程二:构建第一个简单的程序

本文衔接上文&#xff1a;不睡觉的怪叔叔&#xff1a;ArcGIS API for JS3.x教程一&#xff1a;本地开发环境配置​zhuanlan.zhihu.com一、创建简单的HTML文档创建一个简单的HTML文档&#xff1a;<!DOCTYPE html> <html lang"en"> <head><meta c…

hibernate、easyui、struts2整合

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>学生表</title> <!-- 1jQuery的js包 --> <script type"text/javascript" src"jquery-easyui-1.4.4/jquery.min.js"></script&…

selinux= 为 disabled_CentOS7关闭防火墙和SELinux

关闭防火墙查看防火墙状态[rootlocalhost ~]# systemctl status firewalld临时关闭&#xff08;下次开机启动&#xff0c;自动启动防火墙&#xff09;[rootlocalhost ~]# systemctl stop firewalld永久关闭防火墙&#xff08;开机启动时不在启动&#xff09;[rootlocalhost ~]#…

selenium 基本的键盘方法

selenium 基本的键盘方法 今晚不想加班&#xff0c;于是赶紧回来看看书&#xff1a; 1.下了selenium的小工具&#xff1a;FireBug/FirePath。 2.确定了看书顺序&#xff0c;我觉得难度低点开始比较好&#xff0c;所以我还是先看基于Python的selenium&#xff0c;另一本书再看把…

计算机主机组成部分和功能,电脑的组成部分及作用

对于很多人来讲&#xff0c;电脑的使用似乎是一件很稀松平常的事情了。但是对于一些新手或者是一些初学者来说&#xff0c;电脑的相关组成部件还有相应的作用都不是很熟悉&#xff0c;那么电脑的组成部分及作用是什么呢?下面是学习啦小编收集的关于电脑的组成部分及作用&#…

android8 通知呼吸灯_正在消失的功能,为什么越来越多的手机没有呼吸灯?你知道原因吗...

正在消失的功能&#xff0c;为什么越来越多的手机没有呼吸灯&#xff1f;你知道原因吗其实说到手机呼吸灯&#xff0c;大家应该都不陌生&#xff0c;毕竟如果你有心心念念的人儿&#xff0c;每次呼吸灯闪烁&#xff0c;都会迫不及待的打开手机查看消息&#xff0c;想看看是不是…

asp 使用TreeView控件

这段代码为了使用 TreeNodeCheckChanged 事件&#xff0c;会有回刷新的效果&#xff1b; 不喜欢的可查看改进版&#xff0c;利用js控制选择操作&#xff0c;无界面刷新&#xff0c; “http://www.cnblogs.com/GoCircle/p/6231985.html”&#xff1b; 前台代码 <style>.tn…