namespace关键字学习笔记
一、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关键字学习笔记的更多相关文章
- c++ const 关键字 学习笔记
const简单介绍: 1不再使用c中的#define,c++默认不给const定义的变量分配内存,所以它默认的是仅本文件可以看到该变量(即internal linkage), const int bu ...
- Java this关键字 学习笔记
前言: 这篇博文就是系统的学习一下Java中的this关键字,本人对this关键字的理解知识简单的停留在对 类的成员变量进行赋值,这次所以决定系统的体会一下this 关键字 转自:https://b ...
- C++中的const关键字学习笔记
一.const引用 1. 例子一 #include <iostream> using namespace std; class sp { public: sp() {cout<< ...
- [java学习笔记]java语言核心----面向对象之this关键字
一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理: 代表的是当前对象. this就是所在函数 ...
- 《从零开始学Swift》学习笔记(Day5)——我所知道的标识符和关键字
Swift 2.0学习笔记(Day5)——我所知道的标识符和关键字 原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小小的整 ...
- 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字
Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字 原创文章,欢迎转载.转载请注明:关东升的博客 看了之前的学习笔记知道了什么是关键字,现在提示各位在Swift 2.0之后 ...
- C++ 学习笔记 (七)继承与多态 virtual关键字的使用场景
在上一篇 C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量 中说了当父类子类有同名函数时在外部调用时如果不加父类名则会默认调用子类的函数.C++有函数重写的功能需要添加virtual关键字 ...
- JavaScript:学习笔记(4)——This关键字
JavaScript:学习笔记(4)——This关键字 以前这篇帖子是关于闭包的,但是我想弄明白的其实是This关键字.JavaScript的this和Java等面向对象语言中的this大不一样,bi ...
- 并发编程学习笔记(3)----synchronized关键字以及单例模式与线程安全问题
再说synchronized关键字之前,我们首先先小小的了解一个概念-内置锁. 什么是内置锁? 在java中,每个java对象都可以用作synchronized关键字的锁,这些锁就被称为内置锁,每个对 ...
随机推荐
- JDBC:随机生成车牌号,批量插入数据库
package InsertTest; /* * 单客户端:批量插入 */ import java.sql.Connection; import java.sql.DriverManager; imp ...
- Eclipse界面简介
下载安装完成后,Eclipse的界面如下: (6)为eclipse的perspective(视图方案)由于安装的是for Java development的eclipse,故视图界面默认 为使用Jav ...
- VSTO - 使用Excel加载项生成表和图表
此示例显示如何创建Excel的加载项,使用户可以在其工作表中选择库存符号,然后生成一个新工作表,显示库存的历史性能. 工作表包含数据表和图表. 介绍Excel加载项通常不知道工作表包含什么.典型的加载 ...
- CentOS7安装配置Bacula yum方法
参考: https://www.baidu.com/link?url=o2QIy2YZWjsJPAFJuYFhrH3nPvtyRkSe-o5Q_FqFZ5E1EMOsIOmGeKm0HAonwHOw8 ...
- Bootstrap中模态框多层嵌套时滚动条问题
在使用Bootstrap中模态框过程中,如果出现多层嵌套的时候,如打开模态框A,然后在A中打开模态框B,在关闭B之后,如果A的内容比较多,滚动条会消失,而变为Body的滚动条,这是由于模态框自带的遮罩 ...
- phpstom pojie
https://blog.csdn.net/gu_wen_jie/article/details/79136475
- scrollIntoView()方法
该方法用于建立一个锚点,点击锚点,会跳到相应的内容,且该内容头部与浏览器头部平齐 实例: <html> <head> <title>TODO supply a ti ...
- HDU 1808 Halloween treats(抽屉原理)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=1808 Problem Description Every year there is the same ...
- Spring Web Flow
Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序.Spring Web Flow是Spring MVC的扩展,它支持开发基于流程的应用程序.它将流程的定义与实现流程行为 ...
- Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理
文章目录 1. 声明式事务 2. Spring Boot默认集成事务 3. 实战演练4. 源代码 3.1. 实体对象 3.2. DAO 相关 3.3. Service 相关 3.4. 测试,测试 本文 ...