【C++初阶(一)】学习前言以及命名空间

这篇具有很好参考价值的文章主要介绍了【C++初阶(一)】学习前言以及命名空间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:C++初阶之路⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学习排序知识
  🔝🔝


【C++初阶(一)】学习前言以及命名空间


1. 前言

对于复杂的问题,规模较大的程序
需要高度的抽象和建模时
C语言不再适合应用于这种场景
于是在1982年
C++创始人
Bjarne Stroustrup
在C语言基础上引入面向对象编程概念

【C++初阶(一)】学习前言以及命名空间

本节内容将在介绍完C++个方面的内容后
讲解C++入门第一课:命名空间的内容


2. C++发展历史

1979年,贝尔实验室的本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是在C
语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with
classes。

阶段 内容
C with classes 类及派生类、公有和私有成员、类的构造和析构、友元、内联函数、赋值运算符
C++1.0 添加虚函数概念,函数和运算符重载,引用、常量等
C++2.0 更加完善支持面向对象,新增保护成员、多重继承、对象的初始化等等
C++3.0 进一步完善引入模板,解决多重继承产生的二义性问题和相应构造和析构的处理
C++98 C++标准第一个版本,以模板方式重写C++标准库,引入了STL(标准模板库)
C++03 C++标准第二个版本,语言特性无大改变,主要:修订错误、减少多异性
C++05 C++标准委员会发布了一份计数报告,正式更名C++0x
C++11 增加了许多特性,使得C++更像一种新语言,比如:正则表达式、基于范围for循环、auto关键字、新容器、列表初始化、标准线程库等
C++14 对C++11的扩展,主要是修复C++11中漏洞以及改进,比如:泛型的lambda表达式,auto的返回值类型推导,二进制字面常量等
C++17 在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器等
C++20 自C++11以来最大的发行版,引入了许多新的特性,比如:模块(Modules)、协程(Coroutines)、范围(Ranges)、概念(Constraints)等重大特性,还有对已有特性的更新:比如Lambda支持模板、范围for支持初始化等
C++23 正在制定中

3. C++现状

C/C++在TIOBE编程语言社区
常年位居前五

在23年更是霸榜前三!

【C++初阶(一)】学习前言以及命名空间

关于C++23和最新的C++26
最前沿的改动文章给大家分享两篇

C++23前沿
C++26前沿


实际生活中
C++运用的地方非常多
比较典型的有:

  1. 操作系统以及大型系统软件开发
  2. 服务器端开发
  3. 游戏开发
  4. 嵌入式和物联网领域
  5. 数字图像处理
  6. 人工智能的算法核心领域

在校招笔试面试中
C++更是重量级的存在


4. C语言命名冲突

我们在写C语言时,会遇见这种问题:
取变量名时可能会和库中得变量名冲突

#include<stdio.h>
#include<stdlib.h>

int rand = 10;
int main()
{
	printf("%d", rand);
	return 0;
}

此时运行程序会报错:

【C++初阶(一)】学习前言以及命名空间

这是因为在库中有了rand这个函数,再次使用rand这个名字定义变量或者函数时,编译器会分不清你到底想使用哪个rand


5. 命名空间

C++为了解决C语言上述的问题
引出了命名空间这种玩法

(C++兼容C语言的所有语法)

定义命名空间,需要使用到namespace关键字
后面跟命名空间的名字,然后接一对{}
{}中即为命名空间的成员

比如:

namespace NEO
{
	// 命名空间中可以定义变量/函数/结构体
	int rand = 10;
	
	int Add(int left, int right)//函数
	{
		return left + right;
	}
	
		struct Test//结构体
	{
		int a[10];
		int val;
	};
}

命名空间相当于一个独立的作用域
命名空间中所有内容都局限于该命名空间中

(注:命名空间可以嵌套定义)

【C++初阶(一)】学习前言以及命名空间
拓展:
一个项目或者源文件可以有多个命名空间
它们的名字可以相同

相同名字的空间将会合并为一个空间


6. 命名空间的使用

6.1 方法一

方法一:不展开命名空间时

使用 :: 操作符

namespace NEO
{
	// 命名空间中可以定义变量/函数/结构体
	int rand = 10;
	int Add(int left, int right)
	{
		return left + right;
	}
		struct Node
	{
		struct Node* next;
		int val;
	};
}

int main()
{
	int a = NEO::rand;
	int x = NEO::Add(10,20);
	printf("%d", NEO::rand);
	return 0;
}

在命名空间NEO里面
你如果想使用一个变量或者函数
应该在这之前加上:

空间名 ::


6.2 方法二

方法二:展开命名空间

在空间NEO后面加上

using namespace NEO;

这句话的意思是:
将空间NEO展开为全局域

我们在看C++程序时经常看见:

using namespace std;

std就是C++的标准库

已知C++的输出函数是cout
cout是在标准库中定义的
假设标准库没有展开
我们使用cout时,编译器在全局域
没有找到cout就会报错.
这时就应该这样写:

std::cout << "hello world" << ;

当NEO空间被展开后
空间里的所有内容可以直接使用:

#include<stdio.h>

namespace NEO
{
	// 命名空间中可以定义变量/函数/结构体
	int rand = 10;
	int Add(int left, int right)
	{
		return left + right;
	}
		struct Node
	{
		struct Node* next;
		int val;
	};
}

using namespace NEO;

int main()
{
	int a = rand;
	printf("%d", rand);
	return 0;
}

6.3 方法三

方法三:展开空间中部分内容

假设NEO空间中的rand使用频率很高
可以将rand变量单独展开到全局域

using NEO::rand;

若Add函数使用频率很高:

using NEO::Add;

using NEO::rand;
int main()
{
	int a = rand;//rand展开了直接用
	int x = NEO::Add(10,20);//Add函数没有展开,要使用 ::
	printf("%d", rand);
	return 0;
}

7. 对命名空间展开的思考

假设我们将自定义NEO空间和
标准库的std空间同时展开
那么整型变量rand和rand函数
同时暴露在全局域
我们再去使用它时也会报错

using namespace std;
using namespace NEO;

所以直接展开std标准库也有冲突风险
但是不展开的话,写输入输出会很麻烦

那么平时写代码时应该怎么办?

结论:

  • 写项目时,尽量不要展开标准库
  • 日常练习时应该展开标准库
  • 写项目使用部分常用内容展开

8. 总结以及拓展

命名空间的存在奠基了C++
能作为创建一个大工程的语言
大工程往往会分组安排任务
每个小组可以使用不同的命名空间
每个空间定义相同的名字也没事
这对于开发者来说十分方便!

拓展:

分享几个用C++开发的知名游戏:

  • 绝地求生
  • 巫师三
  • 黑暗之魂
  • 无主之地2
  • 生化危机5

【C++初阶(一)】学习前言以及命名空间文章来源地址https://www.toymoban.com/news/detail-507218.html


🔎 下期预告:缺省参数以及IO流 🔍

到了这里,关于【C++初阶(一)】学习前言以及命名空间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++初阶】C++基础(上)——C++关键字、命名空间、C++输入&输出、缺省参数、函数重载

    目录 1. C++ 2. 命名空间 2.1 命名空间的定义 2.2 命名空间的使用 3. C++输入输出 4. 缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 5. 函数重载 5.1 函数重载概念 5.2 C++支持函数重载的原理——名字修饰(name Mingling) 5.3 extern \\\"C\\\" ❀❀❀ 没有坚持的努力,本质上并没有多

    2024年02月15日
    浏览(45)
  • 【C++初阶】关键字&命名空间&缺省函数&函数重载入门必看!!!超详解!!!

     ========================================================================= 主页点击直达: 个人主页 我的小仓库:代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月07日
    浏览(40)
  • 【C++初阶】前言——C++的发展简述及学习方法分享

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 ====

    2024年02月08日
    浏览(52)
  • 【C++初阶】一、入门知识讲解(C++关键字、命名空间、C++输入&输出、缺省参数、函数重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】十一、归并排序(比较排序)的讲解和实现 (递归版本 + 非递归版本 -- C语言实

    2024年02月05日
    浏览(44)
  • C++命名空间的定义以及使用

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名

    2024年02月02日
    浏览(33)
  • 【C++那些事儿】初识C++ 命名空间,C++中的输入输出以及缺省函数

    君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,数据结构和算法初阶更新完毕,我们继续来扩充我们的知识面,今天我们从认识C++开始来带大家学习C++,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动

    2024年02月08日
    浏览(49)
  • 【初阶C++】前言

    C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了 OOP(object oriented programming:面向对象)思想 ,支持面向对象的程序设计语言应运而生

    2024年02月04日
    浏览(53)
  • 【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数

    铁子们好啊!这是阿辉新开的专栏《拿下C++》的第一篇文章,本文主要带大家了解一下C++,带大家从C语言过渡到C++,所以大家首先要有C语言的基础,否则后面的内容你可能会异常懵逼。不会C语言的铁子,这里推荐各位先看阿辉的专栏《爱上C语言》(点击即可跳转,自荐一下

    2024年02月03日
    浏览(32)
  • 【C++学习】C++入门 | C++该怎么学 | 命名空间 | 输入输出

    欢迎来到C++的世界,这是一门令人兴奋的语言。 好吧,每当我开始阅读C++的书籍的时候,开头的第一句话必定是这个, 也不知道其他语言的编程书籍是不是这样,那就让这句话也作为我C++分享之路上的第一句话吧。 目录 写在前面 1. C++怎么学? 1. C语言 2. Object-Oriented C++ 3.

    2024年02月10日
    浏览(35)
  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

    命名空间 namespace 又称为 名字空间 , 名称空间 , 名域 , 作用域 , 是 C++ 语言 对 C 语言 的扩展 之一 ; C++ 中的 命名空间 namespace 指的是 标识符 的 可见范围 , C++ 标准库中的 所有 标识符 , 都定义在 std 命名空间中 ; 命名空间 英文名称是 \\\" namespace \\\" , name 是 名字 , 名称 的意思 ,

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包