如何看待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++

目录
相关文章
|
3月前
|
开发者 UED
代码之外:软件开发者如何培养跨界思维
在技术飞速发展的今天,软件开发者面临的挑战已超越单纯编码技能。本文探讨了跨界思维的重要性及其对职业成功的推动作用。跨界思维能促进创新、提高适应性和增强沟通能力。通过学习新知识、参与多学科项目、建立多元化网络、培养创新思维及学习设计思维,开发者可全面提升自身能力。这不仅增强个人竞争力,还促进团队创新。
|
存储 NoSQL C++
如何看待2023年大量劝入C++?
如何看待2023年大量劝入C++?
|
7月前
|
存储 人工智能 自然语言处理
数字时代是什么意思
数字时代是什么意思
239 1
|
架构师 算法
架构师培养计划-无限思维——变量
架构师培养计划-无限思维——变量
70 0
|
机器学习/深度学习 人工智能 算法
一个10年符号主义学者的深度讨论:如何理性看待ChatGPT?(2)
一个10年符号主义学者的深度讨论:如何理性看待ChatGPT?
|
机器学习/深度学习 人工智能 自然语言处理
一个10年符号主义学者的深度讨论:如何理性看待ChatGPT?(1)
一个10年符号主义学者的深度讨论:如何理性看待ChatGPT?
141 0
|
程序员 数据库
以终身成长的角度看待程序员的工作
随笔分享!欢迎留言交流!
140 0
以终身成长的角度看待程序员的工作
思维概念
思维概念
207 0
|
开发框架 JavaScript 前端开发
记一次谈论心得
记一次谈论心得
152 0
记一次谈论心得
|
存储 传感器 人工智能
从现实世界的角度去理解计算机领域的知识
​ “ 从现实世界的角度看计算机,可以帮助我们更清晰的学习计算机领域的知识。 本文试图用生活中常见的事物来解释计算机技术领域,让知识更通俗易懂 ”
907 0
 从现实世界的角度去理解计算机领域的知识