c++新增的名字空间namespace

其实c也有此名字空间的概念

防止命名冲突,尤其是大型程序里很有用,节省精力,以免出错。可以全部引进,可以引进部分,还可以一个都不用。无所谓。

using namespace std;  //标准库的名字都放在std里面

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;//标准库里的东西都可以用了。一劳永逸的方法
 4 int main()
 5 {
 6     cout << "请输入姓名:" <<endl;
 7     string name;
 8     int age;
 9     cin >> name >> age;
10     cout << name << "您好,您的年龄:" << age
11         << endl;//endl换行的作用,还有刷新缓存区
12     //c++里,main函数里的return 0可以省去,系统会自动添加
13     return 0;
14 }

如果标准库里只需要其中一部分:

using std::cout;
using std::cin;
using std::endl;
using std::string;

程序实际只需要四个标准库。::双冒号叫域操作符,A::B意思是A范围里的B。

定义自己的名字空间

 1 #include<iostream>//不是点h
 2 #include<string>
 3 using namespace std;
 4 namespace dashuai
 5 {
 6     string name="大帅";    //需要加上头文件
 7     int age = 24;
 8 }
 9 namespace lalala
10 {
11     char name[20]="啦啦啦";//重名没有问题,因为是不同名字空间里
12 }
13
14 //使用名字空间下的东西,必须先声明
15 using namespace lalala;
16 using namespace dashuai;
17 int main()
18 {
19     cout << "我是" << dashuai::name << age << endl;
20     cout << "lalala" << lalala::name << endl;
21     return 0;
22 }

如果不加名字空间,那么会报错,有歧义。

注意:作用范围不同的标识符,原则上是局部优先,范围越小越先考虑。

1        cout << "我是" << dashuai::name << age << endl;
2
3        cout << "lalala" << lalala::name << endl;
4
5        string name = "aaaa";
6
7        cout << name << endl;//这次打印的是aaaa

这里是局部优先的原则!这样编译是没有问题的,因为程序率先在main函数内部找到了name。

如果是一个全局变量,也要遵循局部优先原则,还是没有问题的,打印aaaa

如果想打印全局变量则使用::name

 1 string name = "全局变量";//
 2 int main()
 3 {
 4     cout << "我是" << dashuai::name << age << endl;
 5     cout << "lalala" << lalala::name << endl;
 6     string name = "aaaa";
 7     cout << ::name << endl;//这次打印的是全局变量
 8     system("pause");
 9     return 0;
10 }

注意:c++把没有放在名字空间里的变量认为放在了匿名名字空间,使用::就可以得到。实际开发的时候不会用那么多名字空间,一个就足够了。

直接使用名字空间的某一局部名

using dashuai::name;
using dashuai::age;

类比using std::cout;等语句。

时间: 2024-10-05 22:19:13

c++新增的名字空间namespace的相关文章

C++匿名名字空间

转自:http://blog.csdn.net/eric_arrow/article/details/8978905 名字空间(namespace),是C++提供的一个解决符合名字冲突的特性.标准规定,在不同名字空间中命名相同的符号,代表不同的实体.通常,利用定义名字空间的办法,可以使模块划分更加方便,减少模块间的相互影响. 通常定义一个名为MyNameSpace的名字空间,其形式为: 1namespace MyNameSpace 2{ 3} 如果不写MyNameSpace,在C++里也是允许的

C++名字空间/C++命名空间

0.序言 名字空间是C++提供的一种解决符号名字冲突的方法. 一个命令空间是一个作用域,在不同名字空间中命名相同的符号代表不同的实体. 通常,利用定义名字空间的办法,可以使模块划分更加方便,减少模块间的相互影响. 1.名字空间的成员 定义在名字空间中的实体称为名字空间的成员. 名字空间内的名字可以被该名字空间内的其他成员直接访问,名字空间外的代码必须指定该名字位于哪个名字空间. 一个名字空间可以包含多种类型的标识符,如下面所列: 变量.常量.函数.结构体/联合体/枚举.类.嵌套名字空间 名字空间

python名称空间namespace和作用域

Python的变量定义后都有自己的作用域,每个作用域内都有名字空间.注意??,python所有的变量和函数都是先定义,后使用!! 名称空间就是变量名称与对象的关联关系.Python中使用变量名引用对象,需要使用该变量时,就在命名空间中进行搜索,获取对应的对象.直接访问一个变量,会在四个namespace中逐一搜索,即:Local(innermost).Enclosing.Global(next-to-last).Built-in(outtermost). 1.Local(innermost):局

C++名字空间详解

代码编译运行环境:VS2012+Win32+Debug 1.名字空间的由来 名字空间(namespace)是由标准C++引入的,是一种新的作用域级别.原来C++标识符的作用域分为三级:代码块({-}和函数体).类域和全局作用域.如今,在类作用域和全局作用域之间,C++标准又添加了名字空间域这一个作用域级别. 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突. 2.名字空间的作用 名字空间的作用主要是为了解决日益严重的名称冲突问题.随着可重用代码的增多,各种不同的

未命名名字空间

未命名的名字空间 我们或许希望所定义的对象.函数.类类型或其他实体,它只在程序的一小段代码中可见,因为这样可以更进一步地缓解名字空间污染问题,因为我们知道该实体只 被用在很有限的地方,所以可能不想再花费太多努力来保证这个实体有惟一的名字而不会与程序其他地方声明的名字冲突.当我们在一个函数或嵌套块中声明一个对 象时,由该声明引入的名字只在声明它的块中可见,但是,如果程序员想让一个实体被多个函数使用,而又不想让该名字在整个程序中可用 又该怎么办呢? 例如 假设我们想实现一组排序函数,对 double

c++名字空间,C与C++字符串的区别,枚举类型

1:命名空间2:C与C++字符串的区别和基本操作3:枚举类型命名空间#include <string> #include <ctype.h> #include <vector> #include <iostream> #include <fstream> // using declarations states our intent to use these names from the namespace std using namespace

C++笔记--名字空间和异常

名字空间 成员函数可以在名字空间的定义里去声明,然后再去采用一种定义方式例如:namespace__name::member_name的方式去定义这个成员函数 1 namespace parser{ 2 double prim(bool); 3 double term(bool); 4 } 5 6 double parser::prim(bool get){/*定义*/} 7 double parser::term(bool get){/*定义,这些定义式定义在命名空间之外的*/} 名字空间中的

C++ 类的引入,名字空间的意义

有一天,公司来了新人,我要对他的一些属性做些基本的记录.比如,我得知道他的姓名,年龄等.那么通过编程来记录他的这些属性,很明显,我得有一个保存姓名的数组,保存年龄的数组,但是随着记录越来越完善,那么我就得不断的添加数组,如果人不多还好,但是一旦人多了起来之后,每来一个人,都要重开一边数组记录他的基本信息,首先这样代码会变得又烂又长,而且,不便于开发者管理及开发程序.所以,为了解决这种具有同一属性的数据,我们将它们的同一属性封装成一种类型,这种类型在C语言中称为结构体. 当有了这种类型之后,我可以

在指定网络名字空间执行命令

对于容器来说,可以与host共享网络名字空间,也可以用单独的网络名字空间.这个可以通过container的配置文件来指定. 如果需要用单独的网络名字空间,可以指定容器的网络类型为veth: lxc.network.type = veth 如果要跟host共享网络名字空间,那么可以指定容器的网络类型为none lxc.network.type = none 在host上面,作为root用户,是有权限访问所有网络名字空间的数据的,但是大部分程序默认只是访问host所在的网络名字空间.如果我们想访问容