C++11 新增语法剖析

传统艺能😎

小编是双非本科大一菜鸟不赘述,欢迎米娜桑来指点江山哦(QQ:1319365055)

🎉🎉非科班转码社区诚邀您入驻🎉🎉
小伙伴们,打码路上一路向北,彼岸之前皆是疾苦
一个人的单打独斗不如一群人的砥砺前行
这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!!
社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精)
直达: 社区链接点我
___在这里插入图片描述

十年磨(不出)一剑🤔

众所周知 C++ 是一个历来小心谨慎,不敢尝试冒进的 “刻板” 语言,C++ 标准委员会按常理都会一段时间对 C++ 进行更新修正。广为人知的是 C++ 上一个版本 C++98 ,本来说十年磨一剑,在 18 年会搞出 C++18 ,但是很明显标准委员会摸鱼的摸鱼,犹豫的犹豫,计划一拖再拖最后问世于 2011 年,索性得名——C++11。

相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。

相比较而言,C++11能更好地用于系统开发和库开发、语言更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多。但是由于 C++ 的保守不敢向 python 一样激进,到现在都没有一个网络库,这也是 C++ 一直以来的一大遗憾。

接下来就来看看 C++11 有哪些亮眼的语法吧

初始化列表统一化🤔

C++98 允许使用大括号 {} 对数组或者结构体元素进行统一的列表初始值设定,举个栗子:

struct Num
{
   
	int _x;
	int _y;
};
int main()
{
   
	//数组元素初始化
	int a[] = {
    1, 2, 3};
	int b[3] = {
    1 };

	//结构体元素初始化
	Num n = {
    1, 2 };
	return 0;
}

众所周知,{} 的内容就是初始化列表,C++11 拓宽了 {} 业务范围,所有的内置类型和自义定类型都可以使用初始化列表初始化,在 {} 之后可以使用 = ,也可以不使用,但是在进行 new 表达式初始化时一定不能加 = (C++11新增语法)

struct Num
{
   
	int _x;
	int _y;
};
int main()
{
   
	//{}对内置类型初始化
	int x1 = {
    1 }; //等号
	int x2{
    2 };    //不加等号

	//{}对数组元素进行初始化
	int a[]{
   1, 2, 3}; //等号
	int b[3]{
   1};      //不加等号

	//{}对结构体元素进行初始化
	Num p{
    1, 2 }; //不加等号

	//C++11中列表初始化也可用于new表达式中(C++98无法初始化)
	int* p1 = new int[3]{
   0};       
	int* p2 = new int[3]{
   1,2,3}; 
	return 0;
}

同样的,构造函数初始化也可以这样:

class Date
{
   
public:
	Date(int year, int month, int day)
		:_year(year)
		, _month(month)
		, _day(day)
	{
   
		cout << "Date(int year, int month, int day)" << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
   
	//构造函数的一般调用
	Date d1(2022, 10, 07);

	//C++11支持列表初始化这里调用构造函数初始化
	Date d2 = {
    2022, 10, 08 }; //等号
	Date d3{
    2022, 10, 09 };    //不加等号
	return 0;
}

initializer_list🤔

initializer_list 是一个容器,是 C++11 新增的,但是他不像其他容器一样提供了花里胡哨的成员函数

提供了 begin 和 end 函数,用于迭代器遍历;以及获取容器中的元素个数的 size 函数。

在这里插入图片描述
下面两个是非成员的重载,只针对了 begin 和 end。

initializer_list 本质就是一个大括号括起来的列表,如果用auto关键字定义一个变量来接收一个大括号括起来的列表,然后以 t y p e i d ( 变量名 ) . n a m e ( ) \color{red} {typeid(变量名).name()} typeid(变量名).name() 的方式查看该变量的类型,此时会发现该变量的类型就是 initializer_list

int main()
{
   
	auto num = {
    1, 2, 3 };
	cout << typeid(num).name()
  • 72
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 68
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乔乔家的龙龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值