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条:迭代方法优于循环
"懒"程序员才是好程序员.复制和粘贴样板代码,一但代码有错误,或代码功能修改,那么程序在修改的时候,程序员需要找到所有相同功能的代码一处处进行修改.这会使人重复发明轮子,而且在别人 ...
随机推荐
- .xcodeprok cannot be opened because the project file cannot be parsed
用svn更新代码后,打开xcode工程文件出现 xxx..xcodeproj cannot be opened because the project file cannot be parsed. 这 ...
- Apache压力(并发)测试工具ab的使用教程收集
说明:用ab的好处,在处理多并发的情况下不用自己写线程模拟.其实这个世界除了LoadRunner之外还是有很多方案可以选择的. 官网: http://httpd.apache.org/(Apache服 ...
- [置顶]
kubernetes--资源管理
概念 默认情况下,kubernetes不会限制pod等资源对象使用系统资源,单个pod或者容器可以无限制使用系统资源. kubernetes的资源管理分为资源请求(request)和资源限制(limi ...
- tmux用法
列出所有的tmux session,一个session是多个窗口的集合 tmux list-session 创建tmux窗口, tmux new -s server server为tmux的sess ...
- JS中的柯里化及精巧的自动柯里化实现
一.什么是柯里化? 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 C ...
- 跟我一起透彻理解template模板模式
#include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { ...
- WIN7 安装其他的系统boot
1,安装win7系统不赘述. 2,在安装完win7系统后,准备安装CentOS7.0 3,准备ISO文件和所需软件 1.CentOS官网下载DVD ISO文件 一般选择DVD ISO 2 ...
- EffectiveJava(11)Java中的clone
java中的clone clone构造器及其静态工厂的变形 优点:它们不依赖于某一种很有风险的,语言之外的对象创建机制; 它们不要求遵守尚未制定好文档的规范 他们不会于final域的正常使用发生冲突 ...
- 倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 88怎么办
请确认在TWINCAT在线模式下,把Drive的Modes of operation改为8 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com ...
- 打造你的前端神器-webstorm11
说起前端编辑器,用过dw,sublime,hbuilder,webstorm也不陌生,之前的版本8有用过一下,但是觉得比sublime重量太多,但是随着后来用node的开始,发现需要打造个web前端神 ...