C++ primer记录

关于C++编程风格,可参考:Google 开源项目风格指南



第一章:开始

头文件:由于嵌套包含文件的原因,一个头文件可能会被多次包含在一个源文件中。
条件指示符可防止这种头文件的重复处理,例如:
#ifndef BOOKSTORE_H
#define BOOKSTORE_H
/* Bookstore.h 的内容 */
#endif
为了保证头文件只被处理一次,把如下#define 指示符
#define BOOKSTORE_H
放在#ifndef 后面,这样在头文件的内容第一次被处理时,BOOKSTORE_H 将被定义,从而防止了在程序文本文件中以后#ifndef 指示符的值为真。
这就是头文件的常用书写方式。

名字空间:库文件厂商用名字空间来控制全局名字空间污染(即名字冲突)问题,以避免它们的库污染了用户程序的名字空间。因此我们尽量不使用use namespace XXX这种方式写代码,以免造成名字空间的污染。



第二章:C++浏览

动态申请内存:
如:int *p = new int[5];
当我们用完了动态分配的对象或者对象的数组时,我们必须显示地释放这些指针,否则就会造成内存泄露现象。
内存泄漏是指一块动态分配的内存,我们不再拥有指向这块内存的指针,因此我们没有办法将它返还给程序供以后重新使用。
有一些专门检查内存泄露的工具,比如轻量级别的valgrind等。

关键字:explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。

时间: 2024-10-17 05:00:07

C++ primer记录的相关文章

c++ primer 记录1

目录 C++ 记录 不要 混用带符号类型和无符号类型.主要是比较 加减. 右值引用.TODO 数组指针和指针数组 const typedef auto decltype TODO C++ 记录 不要 混用带符号类型和无符号类型.主要是比较 加减. 右值引用.TODO 数组指针和指针数组 a.数组指针: 是指针,指向数组. 如: // 声明方式. 由于"[]"比"*"优先级要高,所以需要"()" int (*parr)[5]; // 使用方式 in

C++ primer学习记录(个人猜想未测试版本)

学习版本:第五版. 本博文主要记录个人曾经并不知晓知识细节. 因为linux下的编译环境还未进行学习.所以实际代码测试将在今后完成. 红色:需确认. 蓝色:重点. 1)const对象设定为仅在文件内有效.个人认为:.h .cpp属于同文件的概念(未测试). 2)constexpr:常量表达式标示符.使用此作为前/后缀时,表示此变量/函数为常量表达式.但,具体用途?以及为何需要这样的标示符? 3)但凡使用迭代器的循环,都不要向迭代器增加元素.因为增加元素可能导致容器重新分配内存,导致后续迭代器操作

异步社区《C Primer Plus》勘误记录

记录的内容是在异步社区提交之后被拒绝接受,而我依然认为应当修改的勘误:或者是与编辑沟通体验极不愉快的勘误.且鉴于异步社区勘误无法索引,以此备忘.同时也供大家评判. 1. 页码:229 行数:13 印次:14 勘误截图: 原书内容: (待补) 2. 页码:238 行数:21 印次:14 勘误截图: 接受勘误都要杠一下,也是醉了 原书内容: (待补) 3. 页码:254 行数:5 印次:14 勘误截图: 原书内容: (待补) 4. 页码:271 行数:9 印次:14 勘误截图: 我真的希望大家都能够

《C++ Primer》读书记录五

2015年6月9日  星期二 22:09 第五部分  高级主题 第17章~第18章 第17章 用于大型程序的工具 异常处理,C++的异常处理中,需要由问题检测部分抛出一个对象给处理代码,通过这个对象的类型和内容,两个部分能够就出现了什么错误进行通信 抛出类类型的异常,异常是通过throw对象而引发raise的.该对象的类型决定应该激活那个处理代码.被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位最近的那个.抛出指针通常是个坏主意,抛出指针要求在对于处理代码存在的任意地方存在指针所指向的对

《C++ Primer》读书记录

2015年5月11日 星期一 19:59 第1章 快速入门 第一部分 基本语言 第2章~第8章 第2章 变量和基本类型 基本内置类型,整型(整数,字符和布尔值),浮点型(float,double,long double),有符号/无符号类型 字面值常量 变量,左值和右值 变量名,定义对象,变量初始化规则 声明和定义 名字的作用域 const限定符,只读类型,而不是英文单词常量的意思. 引用,引用和指针的区别? typedef 枚举 类类型 第3章 标准库类型 命名空间的using声明 标准库st

《C++ Primer》读书记录二

第二部分 容器和算法  第9章~第11章 2015年5月13日  星期三 第9章 顺序容器 sequential contai顺序容器的定义 vector<string> svec; list<int> ilist; deque<double> ddeq; 容器元素的初始化,将一个容器初始化为另一个容器的副本,初始化为一段元素的副本,分配和初始化指定数目的元素 容器内元素的类型约束:元素必须支持赋值运算,元素类型的对象必须可以赋值.事实上,除了输入输出标注库类型外,其他

《C++ Primer》读书记录四

第四部分  面向对象编程与泛型编程 第15章~16章 2015年5月18日  星期五  9:19 第15章 面向对象编程 面向对象编程:概述 面向对象编程基于三个基本概念:数据抽象,继承和动态绑定.在C++中,用类进行数据抽象,用类派生从一个类继承另一个类,派生类继承基类的成员.动态绑定使编译器能够在运行时觉得使用基类还是派生类中定义的函数 定义基类和派生类 protect成员,不能被类用户访问,但可以被该类的派生类访问 派生类,class classname:access-label base

《C++ Primer》读书记录三

2015年5月14日 星期四  10:37 第三部分 类和数据抽象  第12章~14章 第12章 类 类的定义和声明,数据抽象和封装 隐含的this指针 何时使用this指针,最常见情况:函数返回对调用该函数的对象的引用 返回*this 从const成员函数返回*this mutable,希望类的数据成员(甚至在const成员函数内)可以修改,可以通过将他们声明为mutable来实现 类作用域 构造函数 构造函数可以被重载 实参决定使用哪个构造函数 构造函数自动执行 用于const对象的构造函数

C++ Primer 课后习题9.39 统计单词个数并记录最大单词和最短单词

习题9.39: 已知有如下string对象: string line1 = "We were her pride of 10 she named us:"; string line2 = "Benjamin, Phoenix, the Prodigal"; string line3 = "and perspicacious perspicacious pacific Suzanne"; string sentence = line1 + ' '