命名空间 in C++【C++学习笔记】

本文讲解了C++中如何通过命名空间来组织和隔离print函数,避免因命名冲突导致的混乱,提高代码可读性和维护性。

61.命名空间 in C++

#include <iostream>
#include <string>
#include <algorithm>
//一个print是正常打印text
void print(const char *text) {
    std::cout << text << std::endl;
}
//一个print是反转text后再打印
void print(const char *text) {
    std::string temp = text;
    std::reverse(temp);
    std::cout << temp << std::endl;
}
int main() {
    print("hello");
}

上面的代码有很多问题

  • 使用的print函数到底是哪一个print
  • 或许可以把函数改名字,但是打印功能的函数多了起来,不可能都是不同名字的,而且强行不同名字也会显得很怪,可读性不佳
    • 并且可能加的别的库里也有print函数,如果没有“分组”,则自己定义的print函数就会和其他的print函数冲突

故此,可以把这两个print“分组”,使用的时候从对应的组里使用对应的print就好了,而这里的“分组”便是命名空间


💡💡💡命名空间(名称空间)的主要目的是避免命名冲突,便于管理各类命名函数

使用名称空间的原因,是因为我们希望能够在不同的上下文中调用相同的符号

🍅namespace 名称空间的名字 {内容}

#include <iostream>
#include <string>
#include <algorithm>
namespace apple {
    void print(const char *text) {
        std::cout << text << std::endl;
    }
}

namespace orange {
    void print(const char *text) {
        std::string temp = text;
        std::reverse(temp);
        std::cout << temp << std::endl;
    }
}
int main() {
    apple::print("hello");	//输出正常text
    orange::print("world");	//输出反转的text
}

💡💡💡而类本身就是名称空间,这就是为什么我们在类外使用一个类内的东西的时候需要加::(和命名空间同理了)

💡💡💡而比如using namespace apple的意思就是:从命名空间apple导出所有东西,就像我从未指定它为命名空间一样

using namespace apple::print;	//可以单独引出一个print函数!!!!

using namespace apple;//引出了apple名称空间的所有

也可以简化名称空间的名字

using a = apple;
int main() {
    a::print("hello");	//可以用a来代替命名空间apple的名字
}

🍅命名空间的实际应用场合

仅仅是举例:

如果加上了其他的库,担心其他的库里有符号或者函数名和自己写的重合了,这个时候就可以把自己写的东西都放在一个命名空间里,这样就可以不用担心会有任何命名重复,就可以自由自在的写代码了!(例子就是C++标准库里的所有东西都位于std名称空间的后面,这样就不会出现命名冲突了,这就是写C++标准库的作者的聪明之处了)

顺便一说,命名空间是C++独有,C是没有的,所以如果用C的代码,可能会有命名冲突,所以C的代码的命名需要小心

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值