读书笔记 effective c++ Item 1 将c++视为一个语言联邦
Item 1 将c++视为一个语言联邦
如今的c++已经是一个多重泛型变成语言。支持过程化,面向对象,函数式,泛型和元编程的组合。这种强大使得c++无可匹敌,却也带来了一些问题。所有“合适的”规则看上去都有例外。我们怎样理解这样一门语言?
最容易的方法是不要将其看成单一的一门语言而是将其看成是一个有相关性的语言的联邦。在一个特定的子语言中,一些规则就比较简单,明确并且容易记忆。当你从一个子语言切换到另外一个子语言时,这些规则可能会改变。为了更好的理解c++,你必须识别主要的子语言,幸运的是,只有四种子语言:
- C.c++以c语言为基础。块,声明,预处理,内建类型,数组,指针等等。都来自于c语言。在许多情况下,c++只不过提供了一些比c高级的解法,但是当你发现你自己正在使用c++中的c语言部分时,高效编程的规则反映出c语言更多的局限性:没有模板,没有异常处理,没有重载等等。
 - 面向对象c++.c++这部分就是带类的c语言,主要包括:类(包括析构函数和构造函数),封装 ,继承,多态,虚函数(动态绑定)等等。
 - 模板c++.这是c++的泛型编程部分,也是大多数程序员在经验方面所欠缺的,关于模板编程的设计遍及整c++编程,一些好的编程规则中包含只适用于模板的条款。事实上,模板编程如此强大,它带来了一个新的编程范型,模板元编程(TPM).
 - STL.STL是一个模板库。它将容器,迭代器,算法和函数对象优雅的整合到一起,模板和库也可以用其他的方法构建出来。使用模板库有自己特殊的方式,当你在使用STL时,你必须遵循它的约定。
 
将这四种子语言记在心里,在不同的子语言之间进行切换时,高效编程可能需要变换策略,譬如,c语言中对于内建类型,按值传递比按引用传递要高效。在c++中,对于类对象来说,因为用户自定义的构造函数和析构函数的存在,按引用传递比按值传递要高效,模板c++中也是如此。但是在STL中,迭代器和函数对象是模仿的C语言中的指针,因此按值传递会比较高效。
因此c++不是统一标准的语言。它是一个语言联邦,每个子语言都有自己的约定。
转载请注明出处
读书笔记 effective c++ Item 1 将c++视为一个语言联邦的更多相关文章
- 读书笔记 effective c++ Item 12 拷贝对象的所有部分
		
1.默认构造函数介绍 在设计良好的面向对象系统中,会将对象的内部进行封装,只有两个函数可以拷贝对象:这两个函数分别叫做拷贝构造函数和拷贝赋值运算符.我们把这两个函数统一叫做拷贝函数.从Item5中,我 ...
 - 读书笔记 effective c++ Item 48  了解模板元编程
		
1. TMP是什么? 模板元编程(template metaprogramming TMP)是实现基于模板的C++程序的过程,它能够在编译期执行.你可以想一想:一个模板元程序是用C++实现的并且可以在 ...
 - 读书笔记 effective c++ Item 54 让你自己熟悉包括TR1在内的标准库
		
1. C++0x的历史渊源 C++标准——也就是定义语言的文档和程序库——在1998被批准.在2003年,一个小的“修复bug”版本被发布.然而标准委员会仍然在继续他们的工作,一个“2.0版本”的C+ ...
 - 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数
		
关于构造函数的一个违反直觉的行为 我会以重复标题开始:你不应该在构造或者析构的过程中调用虚函数,因为这些调用的结果会和你想的不一样.如果你同时是一个java或者c#程序员,那么请着重注意这个条款,因为 ...
 - 读书笔记 effective c++ Item 11 在operator=中处理自我赋值
		
1.自我赋值是如何发生的 当一个对象委派给自己的时候,自我赋值就会发生: class Widget { ... }; Widget w; ... w = w; // assignment to sel ...
 - 读书笔记 effective c++ Item 13 用对象来管理资源
		
1.不要手动释放从函数返回的堆资源 假设你正在处理一个模拟Investment的程序库,不同的Investmetn类型从Investment基类继承而来, class Investment { ... ...
 - 读书笔记 effective c++ Item 14 对资源管理类的拷贝行为要谨慎
		
1. 自己实现一个资源管理类 Item 13中介绍了 “资源获取之时也是初始化之时(RAII)”的概念,这个概念被当作资源管理类的“脊柱“,也描述了auto_ptr和tr1::shared_ptr是如 ...
 - 读书笔记 effective c++ Item 15 在资源管理类中提供对原生(raw)资源的访问
		
1.为什么需要访问资源管理类中的原生资源 资源管理类是很奇妙的.它们是防止资源泄漏的堡垒,没有资源泄漏发生是设计良好的系统的一个基本特征.在一个完美的世界中,你需要依赖这样的类来同资源进行交互,绝不 ...
 - 读书笔记 effective c++ Item 16 成对使用new和delete时要用相同的形式
		
1. 一个错误释放内存的例子 下面的场景会有什么错? std::]; ... delete stringArray 一切看上去都是有序的.new匹配了一个delete.但有一些地方确实是错了.程序的行 ...
 
随机推荐
- HTML中meta的应用
			
meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用 于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name ...
 - NSURLRequest POST方式请求服务器示例
			
http://lizhuang.iteye.com/blog/1833297 1. 准备阶段 NSString *urlString = [NSString stringWithFormat:@&q ...
 - HDU 3501 Calculation 2 ——Dirichlet积
			
[题目分析] 卷积太有趣了. 最终得出结论,互质数和为n*phi(n)/2即可. 计算(n*(n+1)/2-n-n*phi(n)/2)%md,用反正法即可证明. [代码] #include <c ...
 - php 利用socket上传文件
			
php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51 ...
 - iOS  文本属性
			
http://blog.csdn.net/hello_hwc/article/details/46731991
 - 计时器chronometer补充
			
项目中要实现关于安卓控件chronometer这部分的功能需求: 1.计时器的功能对用户答题时间进行时间统计,用户答完该题,进入下一题,计时器接续上一题的结束时间继续计时: 2.用户可以跳出答题界面, ...
 - sql数据库恢复 文件丢失误删除 误格式化置疑报错修复  数据库置疑修复总结/SQL SERVER 2000/2005/2008/2008R2
			
数据库置疑的原因会有多种多样,不同的问题采用的步骤也会有所不同,以下的步骤不能适用所有的情况,但包括了一些基本的步骤. 数据库置疑是指数据库内部处于不一致的状态,很有可能会有数据丢失.我们推荐您从做数 ...
 - Nodejs之package.json介绍说明
			
规范的package.json及package.json中各属性的作用. "name":包名. "description":包简介. "author& ...
 - Struts2命令空间小结
			
sturts2命名空间小结,以tomcat为服务器 1. 命名空间配置为“/” <package name="default" namespace="/" ...
 - Python3基础 frozenset() 创建一个不可更改的集合
			
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...