C++ 学习 ::【基础篇:01】:命名空间的作用 / 意义、声明、使用(建议)与解读

本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下:

  1. 基础篇类与对象(涉及C++的三大特性等);
  2. STL 篇学习使用 C++ 提供的 STL 相关库
  3. 高阶数据结构与算法篇手动实现自己的 STL 库设计实现高阶数据结构,如 B树、B+树、红黑树等。

本期内容:C++ 命名空间的作用 / 意义、声明、使用(建议)与解读


目录:
1. 命名空间的作用 / 意义
2. 命名空间的声明
- - 2.1 声明的语法格式
- - 2.2 命名空间中的成员类型
3. 命名空间的使用(建议)与解读【重点】
- - 3.1 命名空间中成员的访问方式
- - 3.2 using namespace xxx 的意义
- - 3.3 实际项目中的使用建议
合集链接


1. 命名空间的作用 / 意义

代码示例
#include<iostream>

using namespace std;	// 此时即是使用命名空间

int main(){
	return 0;
}

在 C/C++ 中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突(命名)。
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。


2. 命名空间的声明

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中!


2.1 声明的语法格式

基本格式:命名空间关键字 + 空间名 + {};

代码示例
/* 命名空间关键字 + 空间名 + {}; */
/* 即:namespace mystd {}; */
/* {} 中可以自定义成员 */

/* 示例 */
namespace mystd{	// mystd 是自定义空间名! 注:一般开发中是用项目名字做命名空间名。
    int rand;
    double age;
};

2.2 命名空间中的成员类型
  • {} 中可以自定义成员
    成员可包含:
    1. 各种基本数据类型:int、float、double …
    2. 其他“符合”类型:结构体、联合 …
    3. 函数
    4. 命名空间(即:可嵌套)
代码示例
/* {} 中可以自定义成员 */
/*
	成员可包含:
		1. 各种基本数据类型:int、float、double ...
		2. 其他“符合”类型:结构体、联合 ...
		3. 函数
		4. 命名空间(即:可嵌套)
*/

/* 示例 */
namespace mystd{	
    // 各种基本数据类型
    int rand;
    double age;
    
    // 其他“符合”类型:结构体
    struct Node{
        struct Node* next;
        int data;
    };
    
    // 函数
    int max(int a, int b){
        return a>b?a:b;
    }
    
    // 命名空间(即:可嵌套)
    namespace child_mystd{
      	int age;  
    };
};

3. 命名空间的使用(建议)与解读

3.1 命名空间中成员的访问方式

1. 格式:空间名::成员名
2. 嵌套式格式:一级空间名::二级空间名:: … ::成员名

代码示例
/* 示例 */
#include<iostream>

/* 示例 */
namespace mystd {
    int age = 10;			// 可以在空间中初始化变量

    namespace child_mystd {
        int age;
    };
};

int main() {
    // 变量的初始化
    mystd::child_mystd::age = 20;
    
    std::cout << mystd::age << std::endl;				// 输出:10
    std::cout << mystd::child_mystd::age << std::endl;	// 输出:20

    return 0;
}

3.2 using namespace xxx 的意义

直白解读:

  • 如上程序中,我们已知 C/C++ 中的标准库都放置在 std 这个命名空间中,其中即包含了 C++ 标准输入输出:cin 和 cout;
  • 若没有 using namespace std; ,你可以假想 cin 和 cout 就是局部对象,外界无权直接访问及使用!【即访问时必须使用 “命名空间::成员名” 的方式访问】
  • 若有 using namespace std; 就相当于将原来 std 命名空间中的东西公开化,全局可直接访问!【即访问时无需使用 “命名空间::成员名” 的方式访问】
代码示例
/* 如下两个程序: */
/* 程序一 */
#include<iostream>
int main(){
    
    std::cout << "hello world" << std::endl;
    std::cout << "hello world" << std::endl;
    std::cout << "hello world" << std::endl;
    std::cout << "hello world" << std::endl;
    std::cout << "hello world" << std::endl;
    
    return 0;
}

/* 程序二 */
#include<iostream>
using namespace std;
int main(){
    
    cout << "hello world" << endl;
    cout << "hello world" << endl;
    cout << "hello world" << endl;
    cout << "hello world" << endl;
    
    
    return 0;
}

3.3 实际项目中的使用建议

在这里插入图片描述

如上程序

  • 固然使用 using namespace xxx,可以使我们不用繁琐的以 “命名空间::成员名” 的方式访问成员;
  • 但是,接踵而来的问题是:若你不知道命名空间中的成员有哪些,同样可能导致命名冲突【如上图中的 rand】

使用建议

  1. 在我们日常练习中,可以使用:using namespace xxx 的方式;
  2. 在项目中,尽量不要使用:using namespace xxx;
    若出现某些成员高频率使用时,可以使用如下指定命名空间访问!
    如:高频率使用 C++ 的标准输入输出:可用如下形式声明:
    using std::cin;
    using std::cout;
    即:格式:using 命名空间名::指定成员
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NPC的白话文谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值