C++ Primer 查漏补缺 —— C++ 中的各种初始化
初学者在刚开始读 C++ Primer 的时候,总是容易被书中各种初始化搞得头大:默认初始化、列表初始化、值初始化、类内初始值、构造函数初始值列表、new int
和 new int()
的区别...本文把书中这些概念集中总结如下,大括号【】内为原书中文版第 5 版的相应页码。
列表初始化(list initialization)【P39】:用花括号
{}
来初始化变量,在 C++11 中得到全面应用// 4 种初始化的形式都可以
int i = 0;
int i = {0};
int i{0};
int i(0); long double ld = 3.1415;
int a{ld}; // 报错,转换存在信息丢失的风险
int b = {ld}; // 报错,转换存在信息丢失的风险
int c(ld); // 正确,但信息丢失
int d = ld; // 正确,但信息丢失
如果列表初始化存在信息丢失的风险, 编译器将报错。
默认初始化【P40】:如果定义变量时没有指定初始值
- 类类型:由类负责初始化
- 内置类型
- 定义在任何函数体之外(不一定是全局变量,可以在命名空间中):初始化为 0
- 定义在函数体内部(包括定义在类内的类成员【P236】)的非静态变量:未初始化!
- 局部静态变量【P185】:如果没有显式的初始值,将执行值初始化,内置类型将初始化为 0
值初始化(value initialization)【P88、P118】
- 何时进行值初始化?
- 只提供容器(数组除外?)的元素数量而不指定初值时,就会执行值初始化
- 内置类型局部静态变量
- new 类型,后面带圆括号,如:
new int()
,new string()
【P408】
- 内置类型:初始值设为 0
- 类类型:由类的默认构造函数初始化
- 何时进行值初始化?
类的对象无论在函数内/外,全局/局部,静态/非静态,其初始化都是由类负责
- 类内初始值【P65】
- 构造函数初始值列表【P238】
类内初始值(in-class initializer)【P65】
C++11 新标准,在类的定义中直接指定初值,可以用等号或者花括号,但是不能用圆括号。
【P238】推荐使用类内初始值!
class SalesData {
std::string bookNo;
unsigned unitsSold = 0;
double revenue {0.0};
};
构造函数初始值列表【P238】:用构造函数的参数初始化成员变量。
class SalesData {
public:
SalesData(const std::string &s) : bookNo(s) {}
SalesData(const std::string &s, unsigned n, double p) : bookNo(s), unitsSold(n), revenue(p*n) {}
};
new【P408】
string *ps1 = new string; // 默认初始化为空 string
string *ps2 = new string(); // 值初始化为空 string
int *pi1 = new int; // 默认初始化,*pi1 值未定义!
int *pi2 = new int(); // 值初始化,*pi2 为 0 const int *pci - new const int(1024); // 分配并初始化一个 const int
原文地址:https://www.cnblogs.com/tengzijian/p/15376463.html
C++ Primer 查漏补缺 —— C++ 中的各种初始化的更多相关文章
- 半夜思考之查漏补缺, Spring 中的容器后处理器
之前学 Spring 的时候 , 还没听过容器后处理器 , 但是一旦写出来 , 就会觉得似曾相识 . 容器配置器通常用于对 Spring 容器进行处理 , 并且总是在容器实例化任何其他 Bean 之前 ...
- 半夜思考之查漏补缺 , Spring 中 Bean 之间的依赖问题
每次看书都会发现自己的不足 . 当一个 singten 的 Bean 依赖一个 prototype 的 Bean 时 , 如果不加注意 , 会发生一些奇怪的事情 , prototype 变为了 sin ...
- 半夜思考之查漏补缺 , Spring 中的 Bean 继承机制
这里的继承 , 不是 Java 中的继承 , 下面就总结下 Bean继承与Java继承的区别: Spring 中的子类 Bean 和父 Bean 可以是不同类型 , 但是 Java 中的继承则可保证子 ...
- 《CSS权威指南》基础复习+查漏补缺
前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...
- js基础查漏补缺(更新)
js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...
- Entity Framework 查漏补缺 (一)
明确EF建立的数据库和对象之间的关系 EF也是一种ORM技术框架, 将对象模型和关系型数据库的数据结构对应起来,开发人员不在利用sql去操作数据相关结构和数据.以下是EF建立的数据库和对象之间关系 关 ...
- 2019Java查漏补缺(一)
看到一个总结的知识: 感觉很全面的知识梳理,自己在github上总结了计算机网络笔记就很累了,猜想思维导图的方式一定花费了作者很大的精力,特共享出来.原文:java基础思维导图 自己学习的查漏补缺如下 ...
- 20165223 week1测试查漏补缺
week1查漏补缺 经过第一周的学习后,在蓝墨云班课上做了一套31道题的小测试,下面是对测试题中遇到的错误的分析和总结: 一.背记题 不属于Java后继技术的是? Ptyhon Java后继技术有? ...
- Mysql查漏补缺笔记
目录 查漏补缺笔记2019/05/19 文件格式后缀 丢失修改,脏读,不可重复读 超键,候选键,主键 构S(Stmcture)/完整性I(Integrity)/数据操纵M(Malippulation) ...
随机推荐
- excel控件只为简单写入数据表--github找到ExcelUtil笔记
github地址 https://github.com/SargerasWang/ExcelUtil 文档地址 https://sargeraswang.com/blog/2018/11/27/exc ...
- 如何配置https
1.创建证书:keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey 其中姓氏和组织名称为登录时的域名:如localho ...
- 回顾games101中的SSAA和MSAA
回顾games101中的AA(抗锯齿) 前言 善于进行课后总结,可以更加巩固自己的知识和具体细节 锯齿(走样)产生的原因 本质上,在光栅化阶段中,用有限离散的数据想表示连续的(类似三角形的某一边),就 ...
- 【CSS复合选择器、元素显示模式、背景】前端小抄(3) - Pink老师自学笔记
[CSS复合选择器.元素显示模式.背景]前端小抄(3) 本学习笔记是个人对 Pink 老师课程的总结归纳,转载请注明出处! 一.CSS的复合选择器 1.1 什么是复合选择器 在 CSS 中,可以根据选 ...
- MMM双主-双从读写分离部署
原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 前期规划 1.1 主机规划 1.2 虚拟IP规划 1.3 用户列表 1.4 整 ...
- centos7 Tomcat 多项目配置
2021-07-30 1. Tomcat 各目录功能说明 bin :脚本文件目录,存放启动和关闭 Tomcat 的脚本文件conf:存放 Tomcat 的配置文件,server.xml 尤其重要log ...
- SpringBoot 属性配置文件数据注入配置和yml与properties区别
前言 我们知道SpringBoot 通过配置类来解放一堆的xml文件配置,通属性配置文件,来进行,系统全局属性配置,这样极大的简化了我们开发过程,java web 也可以甜甜的从此 快速配置 Spri ...
- JDK1.8源码(六)——java.util.ArrayList类
ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问,实现了Clonea ...
- Python__requests模块的基本使用
1 - 安装和导入 pip install requests import requests 2 - requsts的请求方法 requests.get('https://www.baidu.com/ ...
- jvm学习笔记:类加载过程
类加载器子系统 类加载器的作用是加载class文件到内存 加载阶段->链接阶段->初始化阶段 ClassLoader只负责class文件的加载,至于是否能够运行由执行引擎判断 加载的类信息 ...