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

目录
相关文章
|
存储 NoSQL C++
如何看待2023年大量劝入C++?
如何看待2023年大量劝入C++?
|
UED
郭秀闲:我如何看待埃维诺的未来发展
本文讲的是郭秀闲:我如何看待埃维诺的未来发展【IT168 评论】新年伊始,许多产业都对2017年的发展充满了期待,这其中也免不了各种的预测与展望。作为业界领先的数字化和云服务提供商、商业解决方案和设计体验提供商,埃维诺也在不久前提出了自己对于2017年发展的预期,其中“虚拟现实技术”、“增强客户体验”、“数字化道德”等多个方面的内容都进入了埃维诺的视野。
1847 0
|
设计模式 负载均衡 算法
从技术思维角度聊一聊,『程序员』摆地摊的正确姿势
有人说程序员这个职业,三年升高工,七年做架构,十年送外卖。对此虽然我也曾非常认可,但现在我可以前瞻性(马后炮)地说四个字,杞人忧天
|
设计模式 架构师 NoSQL
从技术思维角度聊一聊『程序员』摆地摊的正确姿势
有人说程序员这个职业,三年升高工,七年做架构,十年送外卖。对此虽然我也曾非常认可,但现在我可以前瞻性(马后炮)地说四个字,杞人忧天!目光肤浅!正所谓天生我材必有用,用完再把外卖送,现在,新的风口——万亿【烟火经济】来了,除了送外卖我们又多了个新选择:摆地摊!一个人一辈子只有那么几次机会可能实现财务自由,机遇稍纵即逝,一定要牢牢把握住。
1057 0
|
大数据 数据中心 云计算
【学习标注】该用生意角度还是技术思维看待云计算?
对云能否成为基础设施的观念,我目前的理解认为是可以成为基础设施的,云这东西不像煤油电气影响到国计民生的生产原料,但反过来想想,电不也是人类创造出来,(电发明的初期,也是各家各户的发电机发电,最后电网出现了,传统生产电的模式就消亡了)然后成为基础原料的么?云发展到最后,也是会有具有垄断性的公司出现,这也是为什么众多巨头加入到云生态的建设中去,在云平台上汇聚众人的智慧开创出各种新的模式,比如物流、生产、营销、研发等等。
2001 0
【观点】复杂是大敌
译文出自:外刊IT评论
603 0
我们为什么要对正确的观点打折扣呢
<div class="markdown_views"><p>我们为什么要对正确的观点打折扣呢 <br> 今天晚上加班时,突然想起小时候的一件事. <br> 读小学的时候,有一次比较重大的考试,我们村里上学的要到乡里参加考试. <br> 刚好和一个成绩总是第一的同学坐在一起,考&lt;自然&gt;的时候,我抄了他的答案. <br> 但是最后结果出来之后,我考得并非预期地好. <
1248 0

热门文章

最新文章