C++——Namesake命名空间

在大型项目中,由多个人共同完成的项目可能存在同名的函数或是全局变量而产生冲突。C++引入命名空间,在每个模块出现重名的情况下仍可以正常工作。

(1)全局无名命名空间  :: v         ::func() 可以表示全局变量或函数

(2)Namespace 。期本质是对全局空间再次划分。确切的说,是对全局的函数和变量再次进行作用域打包

        可以应用于多种类型。 如??? 。Namespace支持嵌套。

namespace name   //可应用的类型
{
global var;
func;
struct type;
other namespace1;
}

//嵌套
namespace pig
{
    int a;
    namespace dog
    {
        int b;
    }
}

Namespace 应用举例以及注意事项 讲解

#include <iostream>

using namespace std;

int v =555;

namespace cat
{
    int a = 1;
    int b = 2;
}

namespace dog
{
    int a = 3;
    int b = 4;
}

int main()
{
    int v = 5;
    cout<<"main v = "<<v<<endl;
    cout<<"globe v= "<<::v<<endl;

//    using dog ::a;//还是这家伙稍逊风骚
//    using dog ::b;//命名空间成员,融入该语句所在的命令空间。会和后边main中重名定义的变量产生命冲突。
//    cout<<"a= "<<a<<"b = "<<b<<endl;

//    using namespace cat;//我说:骚不过啊
//    //using namespace xxx 将命名空间(即全体成员),融入该语句所在的命名空间。可能会产生命令空间。
//    cout<<"a= "<<a<<"b = "<<b<<endl;


    {
        //    using namespace xxx;
        //     一个模块的可以加 { } 避免冲突
        // { } 括号大法好!!
        using namespace dog;
        cout<<"a= "<<a<<"b = "<<b<<endl;
    }

    cat ::a; //直接使用命名空间成员,不会产生命名冲突 对后续重名定义变量无影响
    cat ::b; // 胜过 using dog ::a; 还是您略胜一筹! 最骚的
    cout<<"a= "<<cat::a<<"b = "<<cat::b<<endl;

    int a = 5,b = 6;//main 重名定义的变量
    cout<<"a= "<<a<<"b = "<<b<<endl;

    /*
        命名骚操作牛逼榜排序
        NO.1 : cat ::a; //直接使用命名空间成员,不会产生命名冲突 对后续重名定义变量无影响
        NO.2 : using dog ::b;//命名空间成员,融入该语句所在的命令空间。会和后边main中重名定义的变量产生命冲突。
        NO.3 : using namespace xxx 将命名空间(即全体成员),融入该语句所在的命名空间。可能会产生命令空间。 可以使用 { }作为一个模块来应用!
    */

    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值