IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 条款 04:确定对象被使用前已先被初始化 -> 正文阅读

[C++知识库]条款 04:确定对象被使用前已先被初始化

条款 04:确定对象被使用前已先被初始化

Make sure that objects are initialized before they’re used.

  1. 关于将对象初始化,C++反复无常,在某些语境下系统保证初始化,但某些语境下却不保证。C++存在无初始值对象,其他语言却大都没有这个概念。
  2. 通常情况下,你使用C part of C++而且初始化可能招致运行期成本,那么就不保证初始化。但是进入non-C part of C++,规则就会发生变化。这就可以解释C风格数组不保证其内容被初始化,但vector却有保证(由其构造函数负责)。
  3. 关于初始化和赋值。下列两种构造函数执行结果相同。但列表初始化的方式往往更高效。第一种赋值方式首先调用 A的默认构造函数,为三个成员设初值,然后再对他们赋予新值。默认构造函数所做的工作就此浪费。第二个版本避免了这个问题,而是直接对三个成员针对传入的参数设初值。值得说明的是,对于内置类型两种方式效率几乎相同(因为内置类型的的初始化和赋值成本相同),但是方便起见。建议都用列表初始化方式。
class A {
public:
	A(const std::string& name, const std::list<std::string>& phones, int num);
private:
	std::string name;
	std::list<std::string> phones;
	int num;
};
A::A(const std::string& name, const std::list<std::string>& phones, int num) {
	this->name = name;//这些都是赋值,而不是初始化
	this->phones = phones;
	this->num = num;

}
//初始化列表
A::A(const std::string& name, const std::list<std::string>& phones, int num):
	name(name),phones(phones),num(num) {}
  1. 为了避免在对象初始化之前就过早的使用他们,需要做三件事:1,手工初始化内置类型对象,2,使用成员初始化列表,3,在初始化顺序不定时,利用设计模式加强设计

请记住

1. 手工初始化内置类型对象,因为C++不保证初始化他们。
2. 构造函数最好最好使用成员初始化列表,而不要在构造函数内使用赋值操作。初始列列出的成员变量应该和他在class中的声明次序相同。
3. 为避免跨编译单元初始化序列,请以local static对象替代non-local static对象。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 12:59:34  更:2021-09-12 13:01:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 4:07:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码