如何看待C++

简介:

摘自《Effective C++》第一条条款。

今天的 C++ 已经是个多重范型编程语言 (multiparadigm programming language) ,一个同时支持过程形式(procedural) 、面向对象形式(object-oriented) 函数形式(functional) 、泛型形式 (generic) 、元编程形式(metaprogramming ) 的语言。这些能力和弹性使 C++ 成为一个无可匹敌的工具,但也可能引发某些迷 惑:所有”适当用法”似乎都有例外。我们该如何理解这样一个语言呢?

最简单的方法是将 C++ 视为一个由相关语言组成的联邦而非单一语言。在其某个次语言 (sublanguage) 中,各种守则与通例都倾向简单、直观易懂、并且容易记住。然而当你从一个次语言移往另一个次语言,守则可能改变。为了理解 C++ 你必须认识其主要的次语言。幸运的是总共只有四个:

C语言:

说到底 C++ 仍是以 为基础。区块 (blocks) 、语句( statements) 、预处理器(preprocessor) 、内置数据类型 (built-in data types) 、数组 (aπays) 指针 (pointers) 等统统来自 。许多时候 C++ 对问题的解法其实不过就是较高级的解法,但当你以 C++ 内的成分工作时,高效编程守则映照出语言的局限:没有模板(templates) ,没有异常(exceptions) ,没有重载(overloading) ..…·

备注:相对于原本的C而言,引用等功能应该是C++才有的

C++的面向对象部分:

这部分也就是 with Classes 所诉求的: classes (包括构造函数和析构函数) ,封装( encapsulation) 、继承( inheritance) 、多态 (polymorphism)以及virtual 函数(动态绑定) ……等等。这一部分是面向对象设计之古典守则在 C++ 上的最直接实施。

备注:我觉得还有一个比较有用的是操作符重载

C++的Template(模板):

Template C++。这是 C++ 的泛型编程 (generic programming) 部分,也是大多数程序员经验最少的部分。实际上由于 templates 威力强大,它 们带来崭新的编程范型 (programming paradigm) ,也就是所谓的 template  meta programming (TMP,模板元编程)。

C++的模板和面向对象特性应该就是是让C++在超大规模的系统开发时代码能越写越少的主要原因吧。

备注:函数重载应该算是Template的特性吧。

C++的标准库(STL):

STL是个 template 程序库,看名称也知道,但它是非常特殊的一个。它对容器(containers) 、迭代器(iterators) 、算法(algorithms) 以及函数对象(function objects) 的规约有极佳的紧密配合与协调,然而templates及程序库也可以其他想法建置出来。 STL 有自己特殊的办事方式,当你伙同STL一起工作,你必须遵守它的规约。

总结:

记住这四个次语言,当你从某个次语言切换到另一个,导致高效编程守则要求你改变策略时,不要感到惊讶

关于变量传递方式的问题:

  • C类语言时,pass-by-value(传值) 通常比 pass-by-reference(传递引用)高效
  • 使用面向对象中的类时,由于用户自定义( user-defined )构造函数和析构函数的存在, pass-by-reference-to-const(传递引用常量) 往往更好
  • 运用 Template C++ 时,因为迭代器和函数对象都是在指针之上塑造出来的,所以对STL 的迭代器和函数对象而言,旧式的 pass-by-value守则再次适用

        C++ 并不是一个带有一组守则的一体语言:它是从四个次语言组成的联邦政府,每个次语言都有自己的规约。记住这四个次语言你就会发现C++ 易了解得多。

转载请注明:旅途@KryptosX » 如何看待C++

目录
相关文章
|
1月前
|
开发者 UED
代码之外:软件开发者如何培养跨界思维
在技术飞速发展的今天,软件开发者面临的挑战已超越单纯编码技能。本文探讨了跨界思维的重要性及其对职业成功的推动作用。跨界思维能促进创新、提高适应性和增强沟通能力。通过学习新知识、参与多学科项目、建立多元化网络、培养创新思维及学习设计思维,开发者可全面提升自身能力。这不仅增强个人竞争力,还促进团队创新。
|
4月前
|
机器学习/深度学习 人工智能 架构师
超越年龄界限:程序员职业生涯的持续发展与转型策略
超越年龄界限:程序员职业生涯的持续发展与转型策略
68 0
|
11月前
|
存储 NoSQL C++
如何看待2023年大量劝入C++?
如何看待2023年大量劝入C++?
|
架构师 算法
架构师培养计划-无限思维——变量
架构师培养计划-无限思维——变量
66 0
|
程序员 数据库
以终身成长的角度看待程序员的工作
随笔分享!欢迎留言交流!
133 0
以终身成长的角度看待程序员的工作
|
存储 传感器 人工智能
从现实世界的角度去理解计算机领域的知识
​ “ 从现实世界的角度看计算机,可以帮助我们更清晰的学习计算机领域的知识。 本文试图用生活中常见的事物来解释计算机技术领域,让知识更通俗易懂 ”
903 0
 从现实世界的角度去理解计算机领域的知识
|
大数据 数据中心 云计算
【学习标注】该用生意角度还是技术思维看待云计算?
对云能否成为基础设施的观念,我目前的理解认为是可以成为基础设施的,云这东西不像煤油电气影响到国计民生的生产原料,但反过来想想,电不也是人类创造出来,(电发明的初期,也是各家各户的发电机发电,最后电网出现了,传统生产电的模式就消亡了)然后成为基础原料的么?云发展到最后,也是会有具有垄断性的公司出现,这也是为什么众多巨头加入到云生态的建设中去,在云平台上汇聚众人的智慧开创出各种新的模式,比如物流、生产、营销、研发等等。
1986 0