Effective C++ 49,50
49.熟悉标准库。
C++标准库非常大。
首先标准库中函数非常多,为了避免名字冲突。使用命名空间std。而之前的库函数都存放于< .h>中,如今成为伪标准库。而不能直接将这些头文件所有直接加入命名空间,标准委员会仅仅能又一次创建了不带.h的头文件。对于C中头文件採用相同的方法,可是每一个名字前加入一个c。如C中的<string.h>变成了<cstring>。旧的c++头文件是官方反对使用的,但旧的c头文件不是,为了保持对C的兼容性。
如 <string.h>是旧的C头文件,相应的是基于char*的字符串处理函数,<string>是包括了std的C++头文件。相应的是新的string类,而<cstring>是C头文件的std版本号,但这里没有string类的旧c++版本号,由于官方不推荐这样做。
第二。库中差点儿都是模版。如iostream,操作字符流。流类实际就是类模版,在实例化流类的时候指定字符类型。
即使是string,事实上也是一个模版。类型參数限定了每一个string类中的字符类型。string的类型声明是:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
这里的字符类型与之前iostream中的字符类型是一个意思,它不是指char,指的是一个流中的字符,这里字符类型确定其參数,字符类型指的是字符集。由于不同的字符集在实现的细节上不同,如特殊的文件结束字符。拷贝他们的数组的最有效方式等。这些特征在标准中被称为traits。然后还有string对象运行动态内存分配的方法,使用一个Allocator參数。而Allocator类型的对象被用来分配和释放string对象的内存,其是一个内存管理器。不要手动的声明标准库中的不论什么部分。
Iostream。和传统的Iostream相比。它已经被模版化,继承层次结构也进行了改动。添加了抛出异常的能力。支持string(通过stringstream)和国际化(通过locales)。
新的Iostream能够将string和文件当作流,还能够对流的行为做更广泛的控制,包含缓存和初始化。
容器。标准库中提供了一下的高效实现。vector,list,queue,stack,deque,map,set和bitset。string是容器。对容器的不论什么操作都适用于string。标准库的实现是高效的。使用容器能够消除动态分配内存造成的内存泄漏。
算法,标准库中提供了大量的简易方法,称为algorithm,实际为函数模版。当中大多数适用于库中全部容器以及内建数组。算法将容器的内容作为序列,每一个算法能够应用与一个容器中全部值相应的一个序列。或者一个子序列。
标准算法有,for_each 为序列中的每一个元素调用某个函数。 find 在序列中查找包括某个值的第一个位置, count_if 计算序列中满足某个判定为真的元素的数量。equal 推断两个序列包括的元素的值是否全然相等,search 在一个序列中找出某个子序列的起始位置,copy 拷贝一个序列到还有一个,
unique 在序列中删除反复值, rotate 旋转序列中的值,sort 对序列中的值排序。等等。和容器操作一样,算法也有性能保证。
对国际化的支持。提供有助于开发出国际化软件的特性。支持国际化的最基本的构件是facets 和 locales 。
facets描写叙述的是对一种文化要处理哪些特性。包含排序规则(即某些地区字符集中的字符应该怎样排序),日期和时间应该怎样表示,数字和货币值应该怎样表示。怎样将信息表示符映射成明白的语言信息,等等。locales 将多组facets捆绑在一起,facets是指前面说到的那些特性中的一个,而locales 表示多个facets组成的一个对于某个国家的规则,若一个locales表示美国人是怎样解决前面几个问题的。
对于数字处理的支持。C++库中为复数类和专门针对数值编程而设计的特殊数组提供了模版。如valarray 类型的对象能够用来保存能够随意混叠的元素,
诊断支持。标准库支持三种报错方式:C的断言。错误号,例外 exception 。例外先派生出 logic_error 和 runtime_error ,然后再有这两个类派生出详细的错误类型。logic_error 表示软件中的逻辑错误,理论上能够通过更细致的程序设计来防止。runtime_error 类型的例外为执行时才干发现的错误。
标准库中的容器和算法这部分一般被称为标准模版库 STL 。
STL是标准库中最具创新的部分,它的体系结构具有扩展性。依照STL中的规范,能够进行非常多扩展。
50.提高对C++的认识。
C++设计时的首要目标:与C的兼容性。效率,和传统开发工具及环境的兼容性,解决真实问题的可应用性(即面向对象)。
以上目标阐明了C++语言中大量的实现细节。如,为什么隐式生成的拷贝构造函数和赋值运算符要像如今这样工作,尤其是指针产生的浅拷贝问题?由于这是C对struct的拷贝和赋值的方式,要与C兼容。为什么析构函数不自己主动声明为virtual,为什么实现细节必须出如今类的定义中?由于不这样做会带来性能上的损失。效率非常重要。为什么C++不能检測非局部静态对象间的初始化依赖关系?由于C++支持单独编译(即,分开编译源模块。然后将多个目标文件链接起来,形成可运行程序),依赖现有的链接器。不会程序数据打交道,所以c++编译器差点儿不可能知道整个程序的一切情况。为什么C++不让程序猿从一些繁杂事务如内存管理和低级指针操作中解脱出来?由于一些程序猿须要这些处理能力,一个真正的程序猿的须要自关重要。
Effective C++ 49,50的更多相关文章
- hdu 3555 Bomb(不要49,数位DP)
Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- 【转】最全的 pip 使用指南,50% 你可能没用过
[转]最全的 pip 使用指南,50% 你可能没用过 所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 P ...
- EC读书笔记系列之19:条款49、50、51、52
条款49 了解new-handler的行为 记住: ★set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用 ★Nothrow new是一个颇为局限的工具,∵其只适用于内存 ...
- 基于requirejs+bluebird,50行代码实现轻巧实用的前端CMD加载器
首先是github地址,可以用git克隆命令也可以直接在git页面下载 https://github.com/kazetotori/js-requireAsync 下载下来后目录结构是这样的 -pac ...
- Nginx 灰度实现方式(支持纯灰度,纯生产,50度灰及更多比例配置)
前言 Nginx相关技术短信本篇幅不做详细介绍,所以学习本文之前要对Nginx有相关的了解. 生产环境即线上环境,在经历开发.测试再到上线,不可避免的会更新生产环境,但谁又能保证测试过的代码到线上运行 ...
- Effective C++ 35,36,37
35.使公有继承体现 "是一个" 的含义. 共同拥有继承意味着 "是一个".如 class B:public A. 说明类型B的每个对象都是一个类型A的对象, ...
- Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?
Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...
- Web调优之IBM JDK+liberty(一): Jmeter pod里压力,50个线程并发测试,调整 -Xms -Xms, Log原来是大问题
1.运行环境 k8s Web服务器: Liberty(IBM J9 JDK),base image : FROM websphere-liberty:20.0.0.3-kernel-java8-ibm ...
- [Effective JavaScript 笔记]第50条:迭代方法优于循环
"懒"程序员才是好程序员.复制和粘贴样板代码,一但代码有错误,或代码功能修改,那么程序在修改的时候,程序员需要找到所有相同功能的代码一处处进行修改.这会使人重复发明轮子,而且在别人 ...
随机推荐
- MTD
内存技术设备(英语:Memory Technology Device,缩写为 MTD),是Linux系统中设备文件系统的一个类别,主要用于快闪存储器的应用,是一种快闪存储器转换层(Flash Tran ...
- 咏南3层数据集控件--TYNDataSet
咏南3层数据集控件--TYNDataSet 和2层CS数据集的语法非常近似.有了这个控件,学习掌握3层开发变得如此地简单. 新增数据: procedure Tfunit.btnappendClick( ...
- 【Linux】CentOS7上安装google谷歌浏览器
1.首先进入根目录,然后进入etc/yum.repos.d目录下,创建google-chrome.repo文件 cd / cd etc/yum.repos.d vim google-chrome.re ...
- 【Spark】SparkContext源代码解读
SparkContext的初始化 SparkContext是应用启动时创建的Spark上下文对象,是进行Spark应用开发的主要接口,是Spark上层应用与底层实现的中转站(SparkContext负 ...
- Unicode类别
Unicode 通用类别: http://msdn.microsoft.com/zh-cn/library/20bw873z(VS.80).aspx 类别 说明 Lu 字母,大写 Ll 字母,小写 L ...
- 【共享单车】—— React后台管理系统开发手记:AntD Form基础组件
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- ecshop_商品描述远程图片自动本地化插件
解压缩文件,覆盖 ecshop 的 \includes\fckeditor文件夹. 这样在后台添加商品的商品详细描述,编辑器最后一个按钮就是自动下载 远程图片到你的网站空间,这样可防止对方网站图片失效 ...
- 甲骨文Java Archive
甲骨文Java Archive 甲骨文Java Archive提供自助下载访问我们的一些历史的Java版本. 警告: 这些旧版本的JRE和JDK来帮助开发人员提供了在旧系统调试问题. 他们没有更新最新 ...
- Oracle 数据库监听配置
一.监听器(LISTENER) 监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求.既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的 ...
- storage事件 js页面间通信
1.概述 https://developer.mozilla.org/en-US/docs/Web/Events/storage localStorage 或者sessionStorage存储的数据发 ...