现代C++实战100练:初始化列表

C++学习精选练手100例 摘自C++学习书籍练习实例,程序实测编译通过,百分百靠谱,好用 立即下载

在讲这个问题之前,我想先说下本文的风格,这也是我写作的风格,通常我不会像教科书一般上来就直说概念和道理,我喜欢用已知,大家可以理解的问题去引入一个知识,这是我自己的学习方法,也希望介绍给大家。

同时你可以在文章开头,看到你将通过本文了解到什么,再决定去不去花费时间阅读,毕竟时间很宝贵。

您可以通过本文了解到什么

什么是初始化列表

什么是POD类型

C++11之后,对初始化列表做了什么改变

建议您在以后的开发使用初始化列表,这将有一些帮助!

C++11前的初始化列表

在C++11之前,就有了初始化列表这个概念了。

但是在那时不同的对象有着不同的初始化方法,例如普通数组、POD (Plain Old Data,即没有构造、析构和虚函 数的类或结构体)类型都可以使用 {} 进行初始化,也就是我们所说的初始化列表。而对于类对象的初始 化,要么需要通过拷贝构造、要么就需要使用 () 进行。这些不同方法都针对各自对象,不能通用。

POD类型:Plain Old Data,即没有构造、析构和虚函 数的类或结构体

数组和POD的初始化

int arr[3] = {1, 2, 3};

std::vector<int> vec = {1, 2, 3, 4, 5};

类的初始化

class Foo 
{
	public:
	int value_a;
	int value_b;
	Foo(int a, int b) : value_a(a), value_b(b) {}
};

//初始化
Foo foo(1, 2);

C++11之后的初始化列表

虽然C++11之前的初始化,使用起来没有什么问题,但是作为程序员,都是”懒惰“的,我们总是想着怎么再简单一点,所以C++11推出了新特性 ”初始化列表“

为了解决这个问题,C++11 首先把初始化列表的概念绑定到了类型上,并将其称之为 std::initializer_list, 允许构造函数或其他函数像参数一样使用初始化列表,这就为类对象的初始化与普通数组和 POD 的初 始化方法提供了统一的桥梁,例如:

#include <initializer_list>]
#include<iostream>
#include <vector>

class CMagicFoo 
{
public:
	std::vector<int> vec;
	CMagicFoo(std::initializer_list<int> list)
	{
		for (std::initializer_list<int>::iterator it = list.begin(); it != list.end(); ++it)
		{
			vec.push_back(*it);
		}	
	}
};
void InitList() 
{
	// after C++11
	CMagicFoo magicFoo = { 1, 2, 3, 4, 5 };
	std::cout << "magicFoo: "<<std::endl;
	for (std::vector<int>::iterator it = magicFoo.vec.begin(); it != magicFoo.vec.end(); ++it)
	{
		std::cout << *it << std::endl;
	}
}

总结

语法糖!

所有类型的初始化都可以使用初始化列表!

本文代码除了讲解了初始化列表的新特性,还有变量声明的的部分,如果有不了解这里的同学,可以查看我之前的文章《变量声明强化》

.
本文的代码地址: Modern_Cpp_Practice.
代码持续更新,欢迎下载测试,喜欢的给个star!
本系列将长期更新,希望对您有帮助,本文的代码风格参考Google代码风格,希望对您有借鉴!

c++经典练习200道例题(好好练习) 这是一个很不错的c++学习的内容应用的地方,希望用到的同学好好的应用,一定能给你帮助的! 立即下载

相关推荐

c++编程实战宝典

c++实战编程,包括c++基础知识、面对对象基本编程、c++中的标准库和模板库、高级主题、开发实战等5大篇

【C++ 程序设计】实战:C++ 实践练习题(1~10)

C++ 程序设计实例:二维数组、奇偶性、指针与变量、员工薪资、整型值(%4d进行格式化)、求三个数中的最大值和最小值、同一字母次数统计、字符串回文判断、闰年判断、交换两个双精度数

顾三殇 —— 博客空间(软件测试) 2880

C++编程实例100篇

C++编程实例100篇,里面有很多很基础的编程实例,可以作为参考。

《C++实战小练》**01:简单类的使用

前言 鉴于大家在初学面向对象这一概念时对于类的理解不太深刻,作为一名正在面向对象的大一学生,特意为大家分享我的C++练习题目,并附上源码注释,希望大家可以关注我,一起学习,一起进步。有什么可以改进优化的地方欢迎大家及时私信我,也可以关注我的公众号。一起加油噢,我现在也是蒟蒻一枚。 题目 思路很清晰,关键是怎么写到类里去。在这里我一般把这个问题就看做一个类,这样其实直接在类里写solution就完全...

qq_45766916的博客 379

【嵌入式】树莓派部署NCNN的YOLOv5模型

树莓派部署NCNN框架的YOLOv5模型

Ace_Spade的博客 3783

大疆 DJI Mobile SDK实战指南——从零构建Android示例开发环境

本文提供了一份详尽的DJI Mobile SDK Android开发环境搭建实战指南。文章手把手教你从注册开发者账号、获取App Key,到配置Android Studio、下载官方示例代码,最终成功运行DJI官方Android示例程序,帮助开发者快速入门无人机应用开发,避开常见编译与依赖问题。

weixin_29188043的博客 275

《C++实战小练》**02:运算符重载实例(四)

前言 其实运算符重载这一块大家还是忽略了他的重要性。熟练地掌握运算符重载可以更好地理解类的概念,更好地使用。 题目 注意这里又一个数组头指针赋值的操作。 代码 #include <iostream> #include <cstdlib> #include <vector> using namespace std; class test { private: int n; vector<int> a; public: test(in

qq_45766916的博客 315

HSM 网络安全 信息安全

HSM HSM信息安全功能 汽车电子网络安全中HSM 的应用场景 选择适合汽车电子网络安全的 HSM 符合汽车安全标准和法规要求的HSM HSM 在汽车电子网络安全中的可靠性和安全性 评估汽车电子网络的安全性 汽车 HSM(Hardware Security Module)模块开发 汽车 HSM(Hardware Security Module)模块测试

天赐好车的博客 1240

【C++ 程序设计】实战:C++ 循环结构实践练习题

C++循环结构的实践练习题:涵盖了不同的计算和判断逻辑,包括寻找最大数、奇偶数的平方和和立方和计算、判断是否为素数、求解区间内的素数和个数、求最大公约数、统计因数个数、判断完数、计算幂函数、判断水仙花数、计算数根、寻找特殊数值、生成斐波那契数列、计数数据个数及最大值、求和、奇数和、数列求和等等。

顾三殇 —— 博客空间(软件测试) 7185

【人工智能】广度优先搜索(BFS)在人工智能中的应用(Python源码)

本文系统阐述了广度优先搜索(BFS)算法在人工智能领域的核心原理与应用。作为无信息搜索算法,BFS通过FIFO队列实现节点遍历,保证在无权图中的最优性。文章详细解析了BFS的伪代码实现和Python编程示例,并通过机器人路径规划案例展示了其实际应用场景。测试结果表明,BFS能有效解决包含障碍物的网格寻路问题,验证了算法在AI领域的实用价值。该研究为理解基础搜索算法及其工程应用提供了重要参考。

梦想起飞的地方 1143

【打卡帖】7日玩转ESP32——(第4日) 串口的输入输出

【福利帖】7日玩转ESP32——(第4日) 串口的输入输出

1377

【C++ 程序设计】实战:C++ 实践练习题(31~40)

数列求和 C++ 实现 10 道编程题

顾三殇 —— 博客空间(软件测试) 2402

Android15音频进阶之AudioReach架构agmcap bringup调试(一百二十三)

本篇目的:Android15音频进阶之AudioReach架构agmcap录音调试。

Android系统攻城狮 2231

【CPP11新特性,列表初始化】列表初始化与初始化列表是不是一个概念?列表是怎么初始化的?

CPP11列表初始化语法点介绍,列表初始化与初始化列表概念?列表是怎么初始化的简单介绍。

BinaryWiker的博客 1300

人工智能 (Artificial Intelligence, AI) 原理与代码实例讲解

人工智能 (AI) 机器学习 (Machine Learning) 深度学习 (Deep Learning) 算法 模型 代码实例 应用场景 1. 背景介绍 人工智能 (Artificial Intelligence, AI) 作为一项前沿科技,近年来发展迅速,已渗透到生活的方方面面

AI架构师小马 1230

雷达参数的设置

采样率又可以叫做采样速率或者,顾名思义就是每秒采集的次数。该值越高,单位时间内对信号的采集越多,采样率的单位可以用Hz或者sps表示(sps是采样率,是每秒采样点的数量,sp表示采样点数),一般1sps=1Hz。采样时间是采样点数和采样周期的乘积得到的结果。假设实际采样率为4560ksps,采样点数为256,那么采样周期为1/4560(ms),那么ADC的采样时间就为256*(1/4560)(ms)=0.056ms=56微秒。

qq_50974341的博客 1912

【C++杂货铺】C++11特性总结:列表初始化 | 声明 | STL的升级

本篇文章介绍了C++11中的三个新特性:列表初始化、声明、STL的升级

春人.的博客 6520

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++11(上):重塑 C++ 的现代革命

C++11核心特性解析:现代C++的革新与优化 本文深入剖析了C++11标准带来的革命性升级,重点介绍了三大核心特性: 列表初始化:实现统一初始化语法,支持内置类型和自定义类型的{}初始化,并引入std::initializer_list机制简化容器初始化 右值引用: 区分左值/右值概念 支持移动语义(移动构造和移动赋值) 有效解决深拷贝性能问题 优化传值返回场景 移动语义应用: STL容器新增右值引用版本接口 通过移动而非拷贝提升性能 特别适用于临时对象处理场景 这些特性使C++在保持高性能的同时,显著提

心向往之,行必能至 2365

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【C++11】统一的 {} 列表初始化

使用初始化列表时,可添加等号 =,也可不添加。​ 初始化列表的优点在于可。

lirendada的博客 1600

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

现代C++语言-初始化

初始值可以由声明符或 new 表达式的初始化器部分提供。

xwhxwhxhwwjx的博客 1962

C++初始化和赋值语句的区别?初始化列表,有哪些初始化方式?

方式语法示例特点/说明默认初始化T obj;可能产生未定义值(内置类型)或调用默认构造。直接初始化T obj(arg);直接调用匹配的构造函数。拷贝初始化常用于单参数构造(虽然有等于,但不是赋值,可能触发隐式转换)。列表初始化推荐,统一、安全、防止窄化转换。值初始化T obj{};初始化为类型的“零值”。聚合初始化用于简单结构体和数组。类内初始化提供成员的默认初始值。现代C++最佳实践优先使用列表初始化{},因为它最清晰、最安全,并且几乎在所有场景下都适用。

ULTRAmanTAROACE的博客 752

C++11(列表初始化)

首选{}初始化: 在任何可以的地方使用{}。它更统一、更安全(防止窄化)、更清晰(避免歧义解析)。理解的优先级: 这是{}初始化最重要的机制。要知道你的调用的是哪个构造函数。在特定场景下选择()当你明确想调用一个非-构造函数,而该类又恰好有构造函数时(如在模板代码中,如果不希望初始化过程被干扰,可以使用()。初始化可用于简单类型: 对于像intdoublechar*这样的简单类型,int x = 5;依然清晰且惯用。初始化成员变量: 在类内初始化成员变量时,坚持使用{}或不要使用()。最终建议:将。

LXdian_LX的博客 1153

C++中的初始化列表

等拿到奶茶(进入函数体)再改参数,已经晚了。简单来说:无默认构造的自定义成员,“必须在创建时传参”,而初始化列表是唯一能在 “创建阶段(初始化阶段)” 传参的地方,函数体只能在 “创建后” 赋值,因此无法替代。初始化列表是构造函数的一部分,位于函数参数列表之后、函数体之前(以:分隔),用于在构造函数体执行前,直接初始化类的成员变量,而非在函数体内赋值。const 成员、引用成员、没有默认构造函数的自定义类型成员,必须在初始化阶段完成初始化,无法在赋值阶段处理 → 只能用初始化列表。

流浪青春 868

C++11实用的“新特性”:列表初始化+右值引用与偷懒艺术——移动语义

本文介绍了C++11中的几个重要新特性:列表初始化,右值引用,完美转发,移动语义。这些特性显著提升了C++的性能和灵活性,特别是在处理临时对象和资源管理方面提供了更高效的解决方案。

Miun123的博客 1894

C++11列表初始化与右值引用:现代C++编程的核心优化技术

在C++编程语言的发展历程中,C++11标准引入了两项革命性特性:列表初始化和右值引用。列表初始化通过统一的{}语法解决了传统初始化方式的混乱问题,同时具备防止窄化转换的安全特性。右值引用作为移动语义的基石,通过区分左值和右值,实现了资源的高效转移,避免了不必要的拷贝开销。这些特性在STL容器操作、字符串处理和模板编程等场景中展现出显著的性能优势,特别是在处理大型数据结构时,移动语义通常能带来30%以上的性能提升。现代C++工程实践中,合理运用列表初始化和移动语义已成为提升代码效率和性能的关键手段。

weixin_33910137的博客 442

C++构造函数初始化列表

构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。 C++构造函数的初始化列表使得代码更加简洁,示例如下: #include <iostream> using namespace std; class Student{ private: char *m_name; int m_age; ...

weixin_45743799的博客 1183
上一篇: 现代c++实践:变量声明强化,竟然可以在if/switch中定义变量!
下一篇: c++11新特性:变长参数模板详解
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值