深度探索C++ 对象模型(5)-Initialization list(1)

2024-03-28 10:32

本文主要是介绍深度探索C++ 对象模型(5)-Initialization list(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以下四种情况,一定要使用成员初始化列表:

1.初始化一个引用成员
2.初始化一个const成员

示例代码为

	class Shape{const int m_size; //const 常量int & m_ref;      // reference memberfloat m_width;float m_height; public:Shape(int s, float w, float h) : m_size(s), m_ref(s) //只能在这初始化{m_size =s; //在初始化将出错m_width = w;m_height = h;}};
  • 如果不对m_size和m_ref进行初始化,则会引起编译错误"E0366 “InitializationList::Shape::Shape(int s, float w, float h)” 未提供初始值设定项: ObjTest"
  • 在构造函数中调用m_size=s;编译错误为"错误 C2166 左值指定 const 对象"

3.调用一个基类的构造函数,且这个构造函数需要传参

示例代码为

	class A{public:A(int x);          // A 的构造函数};class B : public A{ B(int x, int y) : A(x)   // 必须在初始化表里调用基类 A 的构造函数,否则此行引起编译错误{ };}; 

如果不加": A(x)",则会引起编译错误"C2512 “InitializationList::A”: 没有合适的默认构造函数可用“

4.调用一个成员类的构造函数,且这个成员的构造函数要传参时

示例代码为

	class A{public:A(int x);          // A 的构造函数};class B{A m_a;B(int x, int y) : m_a(x) // 必须在初始化表里调用基类 A 的构造函数,否则此行引起编译错误{ }};  

如果不加": m_a(x)",则会引起编译错误"C2512 “InitializationList::A”: 没有合适的默认构造函数可用“


【引用】
[1]<<深度探索C++ 对象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 译
[2] 代码地址 https://github.com/thefistlei/cplusStudy.git

这篇关于深度探索C++ 对象模型(5)-Initialization list(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855361

相关文章

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

SpringBoot实现导出复杂对象到Excel文件

《SpringBoot实现导出复杂对象到Excel文件》这篇文章主要为大家详细介绍了如何使用Hutool和EasyExcel两种方式来实现在SpringBoot项目中导出复杂对象到Excel文件,需要... 在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo