静态购物网站模版,想学设计师首先要学什么,响应式网站用什么软件做效果,怎么查企业注册信息【C 20进阶#xff08;2#xff09;#xff1a;初始化 Initializer】
原文#xff1a;https://blog.csdn.net/weixin_44259356/article/details/144377955
引言
本篇文章为系列文章将着重介绍C20新特性#xff0c;一是希望可以和大家交流分享#xff0c;二是也便于自己…【C 20进阶2初始化 Initializer】
原文https://blog.csdn.net/weixin_44259356/article/details/144377955
引言
本篇文章为系列文章将着重介绍C20新特性一是希望可以和大家交流分享二是也便于自己巩固学习
历史系列
【C 20进阶1模块导入 import】 【C 20进阶2属性 Attribute】
0介绍
本次主要介绍C变量相关一些初始化重点为C20新增初始方式之前版本有的重要内容也会有介绍
1initializer_list
主要用于变量的初始化参数数量不定的情况用例如下
import initializer_list;
using namespace std;
int sum(initializer_listint values)
{int sum{0};for (int value : values) {sum value;}return sum;
}int a {sum({1})};
int b {sum({ 1,2,3,4,5 })}; // 任意数量都行2统一初始化{}
初始化方式有好几种, 这里主要介绍C 11之后常用方便的写法如:
struct StructA
{int x;double y;char z{Z};
};class ClassB
{
public:ClassB(int x, double y, char z) // 右值引用减少数据拷贝后续系列会有介绍{mX x;mY y;mZ z;}private:int mX;double mY;char mZ;
};StructA structA{1,1.2,A}; // 推荐写法
ClassB classB{1,1.2,B}; // 推荐写法 C11之后与ClassB classB (1,1.2,B); 等价另外还可以防止类型收窄
void func(int i) {}int main()
{func(1.1); // 不会报错但是会丢失精度func({1.1}); // 会直接报错收缩转换失效return 0;
}3Designated Initializers【指定初始化】
上述StructA在C20中还可以这么写
StructA structA{.x 1,.y 1.2,
}; // 必须按照变量定义顺序初始化可自定义想初始化的变量那么这么做有什么好处呢指定初始化可以指定需要初始的内容像是变量z如果不需要额外初始化则可以直接不指定此时变量z的值便为默认的‘Z’。另外可以防止重载决议错误
struct StructA
{int x;double y;char z{Z};
};struct StructB
{int x;double y;
};void func(StructA a) {}
void func(StructB b) {}int main()
{func({.x 1,.y 1.2,}); // 错误类型匹配失败会报错func({.x 1,.y 1.2,.z A,}); // 正确return 0;
}4for初始化器
上一章我们就用过if初始化器现在在C20下for也可这么来写 for (array arr{ 1, 2, 3, 4 }; int i : arr){ }