龙空技术网

C++知识点 3:namespace 命名空间

Tina是个小妹妹 43

前言:

目前朋友们对“phpusenamespace”都比较重视,我们都需要剖析一些“phpusenamespace”的相关知识。那么小编也在网上搜集了一些对于“phpusenamespace””的相关文章,希望朋友们能喜欢,看官们快快来了解一下吧!

#include<iostream>

using namespace std;

// 背景:随着工程量的增加,变量命名上不可避免的会出现重名

// namespace 是一个关键字

意义:防止名称冲突(在两个不同的命名空间中,即使2个变量名相同,也是2个不同的变量)

// 在实际工作中,基本都使用标准命名空间,很少人使用这个技巧,但是需要了解这些知识点

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 1、创建一个命名空间

namespace A

{

int a = 10;

}

namespace B

{

int a = 20;

}

void test01()

{

cout << "A::a = " << A::a << endl; // A::a = 10 // :: 作用域运算符

cout << "B::a = " << B::a << endl; // B::a = 20

// 变量名相同,但却是不同的两个变量

// 相似: C 中static修饰的全局变量,其作用域只是本文件

// 在2个不同的文件中定义相同的静态全局变量,也是2个不同的变量

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 2、命名空间只能全局范围内定义,不能定义在函数内部

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 3、命名空间内,可以存放 变量、 函数、 结构体、 类 ;也可以嵌套其他的命名空间

namespace C

{

int c = 10;

void func() {};

struct Person {};

class Animal {};

namespace D

{

int d = 20;

}

}

void test03()

{

cout << "C::c = " << C::c << endl; // C::c = 10

cout << "D::d = " << C::D::d << endl; // D::d = 20

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 4、命名空间是开放的,即可以随时把新的成员加入已有的命名空间中

namespace A // 原先A中有 int a = 10

{

int b = 10;

}

void test04()

{

cout << "b = " << A::b << endl; // b = 10 在命名空间A 中加入了 int b =10

cout << "a = " << A::a << endl; // 原值存在,说明这种添加是合并追加,而不是覆盖

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 5、命名空间可以匿名(但一般不这样使用)

namespace

{

int e = 10; // 这种情况相当于定义了 静态全局变量

}

void test05()

{

cout << "e = " << e << endl;

}

//6、命名空间是可以起别名的

namespace veryLongName

{

int a = 10;

}

void test06()

{

namespace vln = veryLongName;

cout << "a = " << veryLongName::a << endl;

cout << "a = " << vln::a << endl; // 二者结果是相同的

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

int main()

{

//test01();

//test03();

//test04();

//test05();

test06();

return 0;

}

****************************************************************************************

1、创建

namespace 空间名称

{

变量; 函数; 结构体; 类; 其他命名空间

}

注意:不同命名空间中相同的变量等,也是完全不同且独立的

因此:命名空间的意义是防止一些名称冲突

****************************************************************************************

2、命名空间只能在全局范围内创建

3、命名空间内可以定义: 变量;函数;结构体;类 (也可以定义后直接初始化)

4、命名空间内可以嵌套其他命名空间

5、命名空间开放的:可以随时的添加内部元素,并且是追加添加,而不是覆盖

6、命名空间可以匿名:即不给命名空间起名字,内部定义的变量等同于静态全局变量

7、命名空间可以起别名 namespace newName = oldName;

标签: #phpusenamespace