【C++基础一】C++介绍和命名空间

1.C++历史

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

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

阶段新增内容
C++1.0面向对象编程特性,类、继承、多态、封装等,函数和运算符重载
C++2.0多重继承,虚继承,抽象类
C++3.0模板,标准库
C++98STL(标准模板库),命名空间,异常处理,RTTI(运行时类型信息)
C++03对 C++98 标准的一些修订和错误修正,支持一些新的编译器特性
C++11自动类型推导, 右值引用与移动语义,范围 for 循环,Lambda 表达式,nullptr,类型别名
C++14泛型 Lambda 表达式,变量模板,Lambda 表达式的返回类型推导,std::make_unique,标准库改进,二进制字面量
C++17结构化绑定声明,std::filesystem,if 和 switch 初始化, 并行算法,std::optional,std::variant,改进的 std::any
C++20模块,协程,,概念,范围,std::format,consteval 和 constinit,改进的 constexpr
C++23扩展的 std::ranges,改进的协程支持,更好的标准化和规范

更详细的C++发展阶段介绍

2.C++的应用

C/C++在TIOBE编程语言社区常年位居前五,在23年更是榜上前三

在这里插入图片描述
典型应用:

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

3.什么是命名空间

在C语言中,可能会遇见:自定义变量名与库函数命名冲突

因为在库中有了rand这个函数,再定义另一个名为rand的变量或函数时,编译器分不清你想使用的是哪个rand

C++为了解决上述问题,更新出了命名空间的解决方式((C++兼容C语言的所有语法))

定义命名空间,需要使用到namespace关键字,后面是命名空间的名字,再用{}划定范围

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

命名空间相当于一个独立的作用域,命名空间中所有内容都局限于该命名空间中
可以定义多个命名空间,每个命名空间内的同名变量或函数互不冲突
若命名空间的名字相同,会合并为一个空间

4.命名空间的使用

4.1. 不展开命名空间

使用操作符::

namespace PTN
{
	// 命名空间中可以定义变量/函数/结构体
	int rand = 10;
	
	//函数
	int Add(int L, int R)
	{
		return L + R;
	}
}

int main()
{
	int A = PTN::rand;
	int N = PTN::Add(10,20);
	printf("%d,%d\n", A,N);
	return 0;
}

想使用命名空间里的变量或函数时,需要使用空间名::

4.2. 展开命名空间

在命名空间后展开此空间

using namespace PTN;//将空间PTN展开为全局域
using namespace std;//将C++的标准库展开为全局域

C++的输出函数是cout,定义在标准库中,需要先展开标准库才能使用打印
std::cout << "hello world"<<

namespace PTN
{
	// 命名空间中可以定义变量/函数/结构体
	int rand = 10;
	
	//函数
	int Add(int L, int R)
	{
		return L + R;
	}
}

using namespace PTN;

int main()
{
	int A = rand;
	int N = Add(10,20);
	printf("%d,%d\n", A,N);
	return 0;
}

4.3.展开空间中部分内容

若命名空间中只有部分变量使用频率很高,可将其单独展开到全局域

using PTN::rand;

int main()
{
    int A = rand;
	int N = Add(10,20);
	printf("%d,%d\n", A,N);
	return 0;
}

4.4.使用习惯

如果标准库和自定义命名空间同时展开,使用同名变量也会报错,因此直接展开标准库也有风险

使用习惯:

  • 写项目时尽量不展开标准库(日常练习随意)
  • 写项目时只把常用的内容单独展开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值