一、namespace简介

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

二、namespace总结

1.namespace的格式基本格式

namespace identifier {
entities;
}
eg:
namespace exp {
int a,b;
}

2.在namespace外使用namespace内的变量需使用‘::’作用域描述符,eg:
exp::a
exp::b

3.使用namespace有效的避免重全局变量重定义

4.using关键字可以帮助从namespace中引入全局变量到当前的声明区域

eg:
#include <iostream>
using namespace std; namespace first {
int x = ;
int y = ;
} 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 ;
}
输出是 2.7183 3.1416
就如我们所指定的第一个x是first::x,y是second.y

5.using关键字也可以导入整个的namespace

eg:
#include <iostream>
using namespace std; namespace first {
int x = ;
int y = ;
} 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 ;
}
输出是 3.1416
2.7183

6.namespace的显示限定
在头文件中,我们通常坚持使用显式的限定,并且仅将using指令局限在很小的作用域中,这样他们的效用就会受到限制并且易于使用。

eg:
#include <iostream>
using namespace std; namespace first {
int x = ;
} namespace second {
double x = 3.1416;
} int main () {
{
using namespace first;
cout << x << endl;
}
{
using namespace second;
cout << x << endl;
}
return ;
}
输出是 3.1416

7.namespace支持嵌套
在namespace first中嵌套了namespace second,seond并不能直接使用,需要first来间接的使用。

eg:
#include <iostream>
namespace first {
int a=;
int b=; 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

8.namespace可以使用别名

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

9.namespace提供了单独的作用域
它类似于静态全局声明的使用,可以使用未命名的namespace定义来实现

#include <iostream>

namespace {
int count = ;
} void chg_cnt (int i) {
count = i;
} int main () { count = ;
std::cout<<count<<std::endl; //没有指定using namespace std,而cout是std中定义的,因此要加上::
return ;
}

10. 一个例子: 一个源文件中有两个main()

#include <iostream>

using namespace std;

namespace android {
int main(void)
{
cout << "android::main()" << endl;
return ;
} } int main(void)
{ cout << "std::main()" << endl; android::main(); return ;
}

namespace关键字学习笔记的更多相关文章

  1. c++ const 关键字 学习笔记

    const简单介绍: 1不再使用c中的#define,c++默认不给const定义的变量分配内存,所以它默认的是仅本文件可以看到该变量(即internal linkage), const int bu ...

  2. Java this关键字 学习笔记

    前言: 这篇博文就是系统的学习一下Java中的this关键字,本人对this关键字的理解知识简单的停留在对  类的成员变量进行赋值,这次所以决定系统的体会一下this 关键字 转自:https://b ...

  3. C++中的const关键字学习笔记

    一.const引用 1. 例子一 #include <iostream> using namespace std; class sp { public: sp() {cout<< ...

  4. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  5. 《从零开始学Swift》学习笔记(Day5)——我所知道的标识符和关键字

    Swift 2.0学习笔记(Day5)——我所知道的标识符和关键字   原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小小的整 ...

  6. 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字

    Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字 原创文章,欢迎转载.转载请注明:关东升的博客 看了之前的学习笔记知道了什么是关键字,现在提示各位在Swift 2.0之后 ...

  7. C++ 学习笔记 (七)继承与多态 virtual关键字的使用场景

    在上一篇 C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量 中说了当父类子类有同名函数时在外部调用时如果不加父类名则会默认调用子类的函数.C++有函数重写的功能需要添加virtual关键字 ...

  8. JavaScript:学习笔记(4)——This关键字

    JavaScript:学习笔记(4)——This关键字 以前这篇帖子是关于闭包的,但是我想弄明白的其实是This关键字.JavaScript的this和Java等面向对象语言中的this大不一样,bi ...

  9. 并发编程学习笔记(3)----synchronized关键字以及单例模式与线程安全问题

    再说synchronized关键字之前,我们首先先小小的了解一个概念-内置锁. 什么是内置锁? 在java中,每个java对象都可以用作synchronized关键字的锁,这些锁就被称为内置锁,每个对 ...

随机推荐

  1. 生成器 Generators

    function* quips(name) { yield "你好 " + name + "!"; yield "希望你能喜欢这篇介绍ES6的译文&q ...

  2. 3.2 Bochs

    Bochs 工具 bochs: bochs ubuntu安装配置Bochs 安装bochs sudo apt-get install bochs bochs-x 创建工程目录 创建工程目录并进入 新建 ...

  3. java语句的控制流程

    if(布尔表达式 ){ 程序执行语句1 }else { 程序执行语句2 } while(布尔表达式){ 程序执行语句 } do{ 程序执行语句 }while(布尔表达式); for(初始化语句,条件语 ...

  4. CString、string、const char*的相互转换

    环境:vs2010 1.CString转string //第一种方式: CString str = _T("CSDN"); USES_CONVERSION; std::string ...

  5. heightchart配置详解

    <div id="container" style="width: 100%; margin: 0 auto"></div><sc ...

  6. SQL-2 查找入职员工时间排名倒数第三的员工所有信息

    题目描述 查找入职员工时间排名倒数第三的员工所有信息CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT ...

  7. elasticsearch.in.sh优化内存

    elasticsearch.in.sh文件主要是内存优化 ES_MIN_MEM=24g(24g是物理内存的一半) ES_MAX_MEM=24g ES调优: 1.Java层面的调优,加大JVM的可用内存 ...

  8. QueryString中的加号变成空格解决方法

    通过Request.QueryString["CheckItem"]的方式调用值的时候,数值中的加号“+”会转换为空格“ ” 例如传输“ABC+EFG”,就会取到“ABC EFG” ...

  9. 删除Git管理的文件

    首先进入由Git管理的文件夹下: 我们直接使用rm命令符删除git1.txt文件 那么你去删除一个版本库里的文件,工作区的文件就和版本库里的不一样了,现在我们采用git status来查看一下状态. ...

  10. Unity读取AssetBundle资源全教程(所有读取方式)

    读取/加载 AssetBundle 资源的多种方式 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Ch ...