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的更多相关文章

  1. hdu 3555 Bomb(不要49,数位DP)

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submi ...

  2. 【转】最全的 pip 使用指南,50% 你可能没用过

    [转]最全的 pip 使用指南,50% 你可能没用过 所有的 Python 开发者都清楚,Python 之所以如此受欢迎,能够在众多高级语言中,脱颖而出,除了语法简单,上手容易之外,更多还要归功于 P ...

  3. EC读书笔记系列之19:条款49、50、51、52

    条款49 了解new-handler的行为 记住: ★set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用 ★Nothrow new是一个颇为局限的工具,∵其只适用于内存 ...

  4. 基于requirejs+bluebird,50行代码实现轻巧实用的前端CMD加载器

    首先是github地址,可以用git克隆命令也可以直接在git页面下载 https://github.com/kazetotori/js-requireAsync 下载下来后目录结构是这样的 -pac ...

  5. Nginx 灰度实现方式(支持纯灰度,纯生产,50度灰及更多比例配置)

    前言 Nginx相关技术短信本篇幅不做详细介绍,所以学习本文之前要对Nginx有相关的了解. 生产环境即线上环境,在经历开发.测试再到上线,不可避免的会更新生产环境,但谁又能保证测试过的代码到线上运行 ...

  6. Effective C++ 35,36,37

    35.使公有继承体现 "是一个" 的含义. 共同拥有继承意味着 "是一个".如  class B:public A. 说明类型B的每个对象都是一个类型A的对象, ...

  7. Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?

    Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...

  8. 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 ...

  9. [Effective JavaScript 笔记]第50条:迭代方法优于循环

    "懒"程序员才是好程序员.复制和粘贴样板代码,一但代码有错误,或代码功能修改,那么程序在修改的时候,程序员需要找到所有相同功能的代码一处处进行修改.这会使人重复发明轮子,而且在别人 ...

随机推荐

  1. Bluetooth篇 开发实例之五 为什么无线信号(RSSI)是负值?

    原文:http://www.cnblogs.com/lele/articles/2832885.html   为什么无线信号(RSSI)是负值 答:其实归根到底为什么接收的无线信号是负值,这样子是不是 ...

  2. maven依赖包下载失败解决办法

    原文:http://www    .zuidaima.com/question/2535347150441472.htm maven依赖包下载失败 比如:Missing artifact org.co ...

  3. Navicat 破解版的安装

    因为电脑系统换掉,重装系统,重新配置了一下环境,安装Navicat,现记录一下过程,以便下次查询使用. 我们首先百度搜索一款navicat for mysql然后进行下载. 2 当我们下载完成之后首先 ...

  4. PC-LINT

    静态代码检查工具PC-Lint(一) 2006-12-07 23:50   C/C++语言的语法拥有其它语言所没有的灵活性,这种灵活性带来了代码效率的提升,但相应增加了代码中存在隐患的可能性.静态代码 ...

  5. 新人补钙系列教程之:3D理论 - 二进制空间分割(BSP)树

    1. 什么是BSP树 BSP算法的初始数据是一个多边形集,BSP在预处理的时候先在多边形集中选取一个多边形作为支持平面,然后根据这个平面将集合划分成两个部分,每个部分是一个新的子节点,递归进行该过程, ...

  6. .net平台 基于 XMPP协议的即时消息服务端简单实现

    .net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具 ...

  7. [Algorithms] Divide and Recurse Over an Array with Merge Sort in JavaScript

    Merge sort is a recursive sorting algorithm. If you don't understand recursion, I recommend finding ...

  8. LeetCode题目:Permutations

    题目:Given a collection of distinct numbers, return all possible permutations. 大意:全排列给定数组,其中给定数组中没有相同的 ...

  9. 【Linux】使用xshell登陆时密码框为灰色,无法输入密码

    使用xshell登陆时,出现以上情况,那么这到底值咋回事呢?经过查询以后发现是服务器端设置问题,解决办法如下: vi /etc/ssh/sshd_config 接着保存退出,然后重启sshd服务 se ...

  10. 数据访问公共类(BaseProvider)

    using System; using System.Data; using System.Data.Common; using System.Configuration; using System. ...