namespace的作用及用法
namespace
所谓namespace,是指标识符的可见范围。C++标准库中的所有标识符都被定义在一个名为 std 的namespace 中。
一、<iostream>和<iostream.h>格式不一样,前者没有后缀。实际上,在你自己编译器的include路径下,你可以看到这两个是两个不同的文件,而且打开后里面的代码也不同。后缀为 .h 的头文件C++标准以明确提出不支持了,C++标准为了与C区分开,也为了能够正确的使用命名空间,规定了头文件不适用后缀 .h 。因而
1、当使用<iostream.h>时,相当于在 c 中调用库函数,使用的是全局命名空间,也就是早期的C++实现;
2、当使用<iostream>时,该头文件没有定义全局命名空间,必须使用 namespace std ; 这样才能够正确的使用 cout ;
二、 由于namespace的概念,使用C++标准库中的标识符时,有以下三种方式:
1、直接在标识符前加上命名空间std : 例如 std :: << cout << std :: hex << 3.1415 << std :: endl ;
2、用 using 关键字指定部分标识符的命名空间:using std :: cout ; using std :: endl ; 那么1中的语句可以改写为 cout << std :: hex << 3.1415 << endl ;
3、最方便的就是使用 using namespace std ; 让命名空间 std 内的所有标识符都有效 。好像把他声明成全局函数一样,这样上面的代码就可以写成 cout << hex << 3.1415 << endl ;
三、命名空间的定义
namespace name { ... } ;
四、命名空间的使用
#include <iostream>
using namespace std;
namespace namespaceA
{
int a = ;
namespace namespaceD
{
int b;
}
}
namespace namespaceB
{
int a = ;
namespace namespaceC
{
int b;
}
}
int main()
{
using namespace namespaceA;
using namespace namespaceB;
cout << a << endl;
}
这样编译,会报错,提示你 a 的命名空间不明确,改成以下即可正确运行:
cout << namespaceA :: a << end ;
cout << namespaceB :: a << end ;
注意,namespace的定义可以嵌套,比如要访问 namespaceC 中的 b 可以这样写
using namespace namespaceB::namespaceC;
cout << b << endl ; //这样就可以访问 namespaceC 中的 b 了;
namespace的作用及用法的更多相关文章
- C++ "#"的作用和用法
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48879093 1 #和##的作用和用法 ...
- serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法
ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...
- Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- JSP九大内置对象的作用和用法总结?
JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...
- (转载)MySQL数据类型中DECIMAL的作用和用法
(转载)http://database.51cto.com/art/201005/201651.htm 在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都 ...
- PreTranslateMessage作用和用法
PreTranslateMessage作用和用法 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗体的消息都要通过这里,比較经常使用, ...
- ViewHolder的作用和用法
一直都看别人用ViewHolder,自己也用过,却不知道它的作用是什么?但知道肯定很有用,而且现在android studio应该有直接生产Viewholder的插件, 不过博主我是个新手,就没尝试去 ...
- 转:C++ 匿名namespace的作用以及它与static的区别
匿名namespace的作用以及它与static的区别 一.匿名namespace的作用在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则 ...
随机推荐
- 使用Vitamio插件显示花屏
Vitamio是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染. 使用vitamio进行播放器的开发非常便捷,使用vitamio的解码,自己编写播放器界 ...
- codeforces 939E Maximize! 双指针(two pointers)
E. Maximize! time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...
- AcWing算法基础1.5
前缀和与差分 两个内容都比较少,就放一起写了 设数组 a 的前 n 项为a1 , a2 , a3 ... an 前缀和数组就是每一项是a数组的前i项和,比如前缀和数组res,res[ 1 ] = a[ ...
- Java里边什么是值传递和引用传递?两个有什么区别
学过java基础的人都知道,在java中参数的传递过程中有值传递和应用传递,那么这两个到底有什么区别呢,下面我通过例子为大家详细的介绍下. 我们都知道Java中有八种数据类型,基础数据类型分别是:by ...
- notepad + +使用步骤
原文地址:https://blog.csdn.net/so_geili/article/details/79317001#一-安装notepad 一. 安装notepad + + notepad+ ...
- Map,Filter 和 Reduce
Map会将一个函数映射到一个输入列表的所有元素上 map(function_to_apply, list_of_inputs) items = [1, 2, 3, 4, 5] squared = li ...
- 【洛谷3546_BZOJ2803】[POI2012]PRE-Prefixuffix(String Hash)
Problem: 洛谷3546 Analysis: I gave up and saw other's solution when I had nearly thought of the method ...
- android 蓝牙 通信 bluetooth
此例子基于 android demo Android的蓝牙开发,虽然不多用,但有时还是会用到, Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试需要两部手机: ...
- Offer收割_4
1.水题 2.BFS宽搜(使用优先队列priority_queue) 4.题意:给数组a.要求重排列数组,使得数组中的任意相邻的两个元素不同.如果存在多个方案,那么选择字典序最小的方案. 如果不能满 ...
- Unity相机平滑跟随
简介 unity中经常会用到固定视角的相机跟随,然后百度发现大家都是自己写的,然后偶也写咯一个,分享一下 PS: 由于刚学C#不久,才发现delegate这个东东,也不知道对性能影响大不大,但是看MS ...