IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 命名空间 in C++【C++学习笔记】 -> 正文阅读

[C++知识库]命名空间 in C++【C++学习笔记】

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的代码的命名需要小心

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 10:41:58  更:2022-04-23 10:42:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:14:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码