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

目录
相关文章
|
编解码 算法 文件存储
浅谈动图文件格式 - GIF
介绍动图的文件格式,及其优劣
2727 0
浅谈动图文件格式 - GIF
|
10月前
|
搜索推荐 数据挖掘 API
微店商品详情接口(微店API系列)
微店商品详情接口是微店API的重要组成部分,帮助开发者和商家获取商品的详细信息(如标题、价格、库存等),并将其集成到应用程序或数据分析系统中。该接口支持HTTP GET/POST请求,返回JSON/XML格式数据,需通过AppKey和AppSecret进行身份验证和签名加密。应用场景包括商品信息同步、数据分析与市场调研、个性化推荐系统等,助力商业决策和业务拓展。
272 13
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
347 4
|
小程序
微信小程序里判断是否关注了公众号
微信小程序开发过程中,经常会遇到需要判断当前用户是否关注了公众号的业务需求,但是微信并没有提供直接判断是否关注公众号的接口,这边提供一种方法,适合就用,不适合也别喷哦。
975 0
微信小程序里判断是否关注了公众号
|
运维 监控 安全
阿里云香港轻量应用服务器评测,1核1G 30M 24元/月,低价VPS
阿里云香港轻量应用服务器评测,1核1G 30M 24元/月,低价VPS
5681 0
|
Oracle 网络协议 关系型数据库
Oracle11g DataGuard部署与维护
DataGuard是Oracle高可用必备技能。
|
Linux RDMA
|
存储 SQL 关系型数据库
什么是索引覆盖?什么是索引下推?
什么是索引覆盖?什么是索引下推?
659 0
什么是索引覆盖?什么是索引下推?
|
对象存储 存储 分布式计算
JindoFS: 云上大数据的高性能数据湖存储方案
JindoFS 是EMR打造的高性能大数据存储服务,可以为不同的计算引擎提供不同的存储服务,可以根据应用的场景来选择不同的存储模式。在2019杭州云栖大会大数据生态专场,阿里巴巴计算平台事业部EMR团队技术专家殳鑫鑫和Intel大数据团队软件开发经理徐铖共同向大家分享了云上大数据的高性能数据湖存储方案JindoFS的产生背景、架构以及与Intel DCPM的性能评测。
16859 58
JindoFS: 云上大数据的高性能数据湖存储方案
|
计算机视觉 异构计算