怎么建立一个公司网站,国外服务器地址ip,深圳网站设计权威乐云践新,网站推广注册个人主页点击直达#xff1a;小白不是程序媛
C系列专栏#xff1a;C干货铺
代码仓库#xff1a;Gitee 目录
C11简介
列表初始化
std::initializer_list
std::initializer_list使用场景
decltype关键字
STL中的一些变化
新容器
array
forward_list
容器中的一些新…
个人主页点击直达小白不是程序媛
C系列专栏C干货铺
代码仓库Gitee 目录
C11简介
列表初始化
std::initializer_list
std::initializer_list使用场景
decltype关键字
STL中的一些变化
新容器
array
forward_list
容器中的一些新方法 C11简介
在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复语言的核心部分则没有改动因此人们习惯性的把两个标准合并称为C98/03标准。 从C0x到C11C标准10年磨一剑第二个真正意义上的标准珊珊来迟。相比于 C98/03C11则带来了数量可观的变化其中包含了约140个新特性以及对C03标准中 约600个缺陷的修正这使得C11更像是从C98/03中孕育出的一种新语言。相比较而言 C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全不仅功能更 强大而且能提升程序员的开发效率公司实际项目开发中也用得比较多所以我们要作为一个 重点去学习。 列表初始化
在C98中标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。例如
struct Point
{int _x;int _y;
};
int main()
{int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0;
} C11扩大了用大括号括起的列表(初始化列表)的使用范围使其可用于所有的内置类型和用户自定义的类型使用初始化列表时可添加等号()也可不添加。 int main()
{int i 0;int j { 1 };int k{ -1 };cout i j k;int arr1[] { 1,2,3,4,5 };int arr2[5] { 0 };int arr3[]{ 1,2,3,4,5 };//添加到new表达式中int* pa new int[4] {1, 2, 3, 4};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{ 2024,1,18 };//初始化一个对象拷贝构造Date d2 { 2024,1,19 };return 0;
}注这里的列表初始化的是直接调用构造函数而下面的赋值重载看起来和列表初始化差不多其实两者天差地别赋值重载是先使用右边的数据构造生成一个临时对象在赋值重载而初始化列表是直接调用构造函数。存在类型转化。 std::initializer_list
std::initializer_list文档介绍 功能可以接受任意多个相同类型的参数 std::initializer_list使用场景 std::initializer_list一般是作为构造函数的参数C11对STL中的不少容器就增加std::initializer_list作为参数的构造函数这样初始化容器对象就更方便了。也可以作为operator的参数这样就可以用大括号赋值。总结我们使用初始化列表初始化STL中的容器时就会将列表生成initializer_list然后initializer_list作为容器构造函数的参数进行初始化。 decltype关键字
关键字decltype将变量的类型声明为表达式指定的类型。 和typeid().name()、auto有很大的区别typeid().name()推演出变量的类型decltype是将变量的类型转化为字符串可以打印出来。 int main()
{int i;double j;vectordecltype(i* j) v1;decltype(i * j) z 10;cout typeid(z).name() endl;cout z endl;return 0;
} STL中的一些变化
新容器
下面中圈起来的就是C11中添加的新容器最后的unordered_map和unordered_set不同于使用红黑树的map和set是使用hash结构实现有关hash的内容和知识会在后面的文章中给大家介绍。 array array数组是固定大小的序列容器它们包含特定数量的元素这些元素以严格的线性顺序排序。说白了也是一个数组只不过和普通的数组比较其越界检查比较严格。 forward_list
是一个单链表和list的区别在于只支持单向迭代器并且只支持头插和头删。
容器中的一些新方法 如果我们再细细去看会发现基本每个容器中都增加了一些C11的方法但是其实很多都是用得比较少的。比如提供了cbegin和cend方法返回const迭代器等等但是实际意义不大因为begin和end也是可以返回const迭代器的。容器中一些还有一些关于移动构造移动和移动赋值的一些内容需要有右值引用的知识铺垫我会在下一篇文章中完整的给大家介绍。 今天给大家分享介绍了C中常用特性的一部分由于篇幅问题会在下篇文章中介绍右值引用等其他问题如果觉得文章还不错的话可以三连支持一下个人主页还有很多有趣的文章欢迎小伙伴们前去点评您的支持就是我前进的动力