c++程序设计语言

摘自c++程序设计语言第四版。

程序设计语言的目的

就是帮助我们用代码来表达思想。因此,一种程序设计语言要完成两个相关的任务:

  • 1.为程序员提供一个工具,用来指明需要由计算机执行什么动作
  • 2.为程序员提供一组概念,用于思考能做些什么

其中有两个基本原则是最重要的:

  • 1.不给比 C++ 更底层的语言留任何余地(在极少的情况下汇编语言是例外)。因为,如果你能用一种更底层的语言编写出更高效的代码,那意味着这种语言很可能比 C++更适合系统程序设计。
  • 2.你不使用它,就不要为它付出代价。如果程序员能够手工编写出很不错的代码,来模拟一个语言特性或是一个基础的抽象机制,甚至性能更好一些,那么一些人就真的会去编写这种代码,而很多人就会效仿。因此,与等价的替代方法相比,我们设计的语言特性或是基础的抽象机制必须不浪费哪怕一个字节或是一个处理器时钟周期。这就是众所周知的零开销原则 (zero-overhead principle)。

C++ 语言特性直接支持四种程序设计风格

  • 1.过程式程序设计;
  • 2.数据抽象;
  • 3.面向对象程序设计;
  • 4.泛型程序设计

左值说明

C++ 中的基本对象具有唯一的身份,即它们位于内存中的特定位置,而且可以通过比较地址与(可能)具有相同值的其他对象区分开来。表示这种对象的表达式被称为左值(lvalue,见 6.4 节)。但早在 C++ 的祖先[ Barron,1963] 所在的年代,就已经有了没有身份的对象(对于这类对象,不存在一个安全存储的地址可供随后使用)。在 C++11 中,这一右值 (rvalue)的概念发展为一个新的概念一不能以低开销进行移动的值

支持资源处理概念的第一步,是“带类的 C”草案中就已有的构造函数和析构函数。随后很快就出现了拷贝控制特性,允许用户自定义赋值运算符和拷贝构造函数。C++11引人的移动构造函数和移动赋值运算符 (见3.3 节)完善了这一思路,它们允许在作用域之间 (见3.3.2 节) 以低代价移动大对象以及简单地控制多态或共享对象的生命周期(见5.2.1 节)。
支持资源管理的语言特性也能使不处理资源的抽象受益。任何建立并维护不变量的类都依赖于这些特性的一个子集。

学习 C++ 最重要的是重视基本概念(例如类型安全、资源管理和不变式)和程序设计技术(例如使用限定作用域的对象进行资源管理以及在算法中使用迭代器),还要注意不要迷失在语言技术性细节中。学习一门程序设计语言的目的是成为一个更好的程序员,即,能更高效地设计和实现新系统、维护旧系统。为此,领悟编程和设计技术比了解所有细节重要得多。对技术性细节不必过分担心,只要你付出时间不断练习,自然而然就掌握了。

学习本书的一个重点是,利用 C++11 的新特性所提供的机会来更新你的设计和编程技术,使之更加现代化:
[1] 使用构造函数建立不变式 (见 2.4.3.2节、13.4 节和17.2.1节)。
[2]配合使用构造/析构函数来简化资源管理(RAII;见5.2节和13.3节)[3]避免“裸的”new和 delete (见3.2.1.2节和11.2.1节)。[4]使用容器和算法而不是内置数组和专用代码 (见4.4 节、4.5 节7.4 节和第32 章)。
[5]优先使用标准库特性而非自己开发的代码(见1.2.4 节)。
[6]使用异常而非错误代码来报告不能局部处理的错误(见2.4.3 和13.1节)。
[7]使用移动语义来避免拷贝大对象 (见3.3.2 节和 17.5.2节)。
使用 unique_ptr 来引用多态类型的对象(见5.2.1节)。[8][9] 使用shared _ptr 来引用共享对象,即,不只有一个所有者负责其析构的对象 (见5.2.1 节)。
[10] 使用模板来保持静态类型安全(消除类型转换)并避免类层次的不必要使用(见27.2 节)。

c++名字由来

c++ 这个名字(发音为see plus plus”)是由 Rick Mascitti 在1983 年夏天创造的,我们选用它来取代我创造的“带类的 C”。这个名字体现了这种新语言的进化本质一一它是从C演化而来的,其中“++”是 C语言的递增运算符。一个稍短的名字“C+”是一个语法错误,它也曾被用于命名另一种不相干的语言。C 语义的行家可能会认为 C++ 不如.++C。新语言没有被命名为 D 的原因是,它是 C 的扩展,它并没有试图通过删除特性来解决存在的问题,另一个原因是已经有好几个自称C语言继任者的语言被命名为 D了。C++ 这个名字还有另一个解释,请查阅[Orwell,1949]的附录。
最初设计 C++ 的目的之一是让我的朋友们和我不必再用汇编语言、C 语言以及当时各种流行的高级语言编写程序。其主要目标是能让程序员更简单、更愉快地编写好程序。在最初,C++ 并没有“图纸设计”阶段,其设计、文档编写和实现都是同时进行的。当时既没有“C++ 项目”,也没有“C++ 设计委员会”。自始至终,C++ 的演化都是为了处理用户遇到的问题,主导演化的主要是我的朋友、同事和我之间的讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值