当前位置: 首页 > news >正文

(C++语言的设计和演化) C++的设计理念

文章目录

  • 前言
  • 📖C++ 语言设计规则
    • 📐规则和原理
    • 📐一般性规则
    • 📐设计支持规则
    • 📐语言的技术性规则
    • 📐低级程序设计支持规则
  • 📖标准化(扩充·评判准则)
    • 📐它精确吗?
    • 📐这个扩充的理由是什么?
    • 📐它已经被实现了吗?
    • 📐这个特征对代码有什么影响?
    • 📐这个修改对效率,以及对 C语言 和目前的 C++ 的兼容性有什么影响?
    • 📐这个修改的文档及教学简单吗?
    • 📐可能存在哪些理由支持**不做**这种扩充?
    • 📐是否存在?
  • 📖库
    • 📐库设计的折中
  • END
    • ⭐关注我

前言

译者

  • 《C++语言的设计与演化》目录 (pku.edu.cn)

  • 《C++语言的设计与演化》有关信息 (pku.edu.cn)

豆瓣

  • C++语言的设计和演化 (豆瓣) (douban.com)

出版社(异步图书)

  • C++语言的设计和演化-异步社区实验平台 (epubit.com)

本文主要摘取书本第4章 C++语言设计规则第6章 标准化第8章 库

是一些关于之父对于在 C++ 中设计和思考中得出的一些明文条例。

📖C++ 语言设计规则

📐规则和原理

目标

  • C++ 应该使认真的程序员感觉到编程序变得更快乐
  • C++ 是一种通用的程序设计语言,它应该
    • 是一种更好的C
    • 支持数据抽象
    • 支持面向对象程序设计

📐一般性规则

  • C++ 的发展必须由实际问题推动
  • 不应该牵涉到无益的对完美的追求中
  • C++ 必须是现在就能用的
  • 每个特征必须存在一种合理的明显的实现方式
  • 总是提供一条合理的明显实现方式
  • C++ 是一种语言,而不是一个完美的系统
  • 为每种应该支持的风格提供全面支持
  • 不试图去强迫人做什么

📐设计支持规则

  • 支持健全的设计概念
  • 为程序的组织提供各种机制
  • 直接说出你的意思
  • 所有特征都必须是能负担的
  • 允许一个有用的特征比防止各种错误使用更重要
  • 支持从分别开发的部分出发进行软件组合

📐语言的技术性规则

  • 不隐式地违反静态类型系统
  • 为用户定义类型提供与内部类型同样好的支持
  • 局部化是好事情
  • 避免顺序依赖性
  • 如果有疑问,就选择该特征的最容易说清楚的形式
  • 语法是重要的(常以某些我们不希望的方式其作用)
  • 清除使用预处理器程序的必要性

📐低级程序设计支持规则

  • 使用传统的(笨)连接器
  • 没有无故的与 C 的不兼容性
  • 在 C++ 之下不为更低级的语言留下空间(除汇编语言之外)
  • 对不用的东西不需要付出代价(0 开销规则)
  • 遇到有疑问的地方,提供手工的手段

📖标准化(扩充·评判准则)

为帮助人们理解在对 C++ 做一个扩充或修改时涉及哪些事项,扩充工作组构造了一集问题,对每个建议的新特征,通常都要问这些问题。

📐它精确吗?

(我们是否能理解你的建议是什么?)请为这个修改写出一个清晰而精准的陈述,说明它对当前语言参考标准的影响。

  1. 语法上需要做哪些修改?
  2. 对语言语义的描述需要做哪些修改?
  3. 它能否与语言的其他部分相互配合?

📐这个扩充的理由是什么?

(为什么你希望有它?为什么我们也会希望有它?)

  1. 为什么需要这个扩充?
  2. 谁会欢迎这个修改?
  3. 这是一个用途广泛的修改吗?
  4. 它是不是对某一组 C++ 语言用户的影响比对其他人的影响更大?
  5. 它在所有合理的硬件和系统中都能实现吗?
  6. 它能支持哪一类编程和设计风格?
  7. 它将阻止哪一类编程和设计风格?
  8. 哪些其他语言(如果有的话)提供了这一种特征?
  9. 它能有助于库的设计、实现和使用吗?

📐它已经被实现了吗?

(如果实现了,那么它是否完全是按照你所建议的形式实现的?如果没有实现,那么为什么你能假定由“”类似“实现或者其他语言得到的经验,足以移用到所建议的特征上?)

  1. 它对一个 C++ 实现有什么影响?
    1. 对于编译器的组织?
    2. 对于运行时的支持?
  2. 这样的实现完成了吗?
  3. 除了实现者自己,还有其他人使用过这个实现吗?

📐这个特征对代码有什么影响?

  1. 如果没有这个修改,代码将是什么样的?
  2. 如果不做这个修改会有什么影响?
  3. 使用新特征是否将导致对新工具的要求?

📐这个修改对效率,以及对 C语言 和目前的 C++ 的兼容性有什么影响?

  1. 这个修改对运行效率有什么影响?
    1. 对于使用这个特征的代码?
    2. 对于不使用这个特征的代码?
  2. 这个修改对编译时和连接时有什么影响?
  3. 这个修改是否影响现存的程序?
    1. 没使用这个特征的 C++ 程序必须重新编译吗?
    2. 这个修改是否影响与其他语言的连接?例如 Fortran 或者 C。
  4. 这个修改对 C++ 程序的静态或动态检查的可能程度有影响吗?

📐这个修改的文档及教学简单吗?

  1. 对于新手?
  2. 对于专家?

📐可能存在哪些理由支持不做这种扩充?

肯定存在反对的意见,而我们工作的一部分就是发现和评价它们,因为如果你给出一个讨论,就能节省时间。

  1. 它是否影响那些不使用的新特征的代码?
  2. 他是否很难学?
  3. 他是否会引出进一步的扩充需要?
  4. 它是否会导致很大的编译器?
  5. 它是否要求扩充的运行支持?

📐是否存在?

  1. 能服务于这个需要的其他代替性特征?
  2. 所建议的语法的其他代替形式?
  3. 所建议模式的更有吸引力或更一般的代替形式?

📖库

📐库设计的折中

  • 强调运行时效率?
  • 使修改之后的重新编译达到最小化?
  • 最大化跨平台的可移植性?
  • 允许用户扩展基本的库?
  • 允许在没有源代码的情况下使用?
  • 与现存的记法和风格混用使用?
  • 使之可以从不是 C++ 写的代码中调用?
  • 对新手也很容易使用?



END

⭐关注我

关注我,学习更多C/C++,算法,计算机知识

B站:

👨‍💻主页:天赐细莲 bilibili

相关文章:

(C++语言的设计和演化) C++的设计理念

文章目录 前言📖C 语言设计规则📐规则和原理📐一般性规则📐设计支持规则📐语言的技术性规则📐低级程序设计支持规则 📖标准化(扩充评判准则)📐它精确吗&#…...

AI音乐:创新引擎还是创意终结者?

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…...

20240621每日后端---------如何优化项目中的10000个if-else 语句?

如何优化 10000 个 if-else 语句?有没有好的解决方案? 额,本身问题就很奇怪,怎么可能有这种代码。。。世界你让我陌生,但是我们还是假象着看看能不能解决一下。 解决方案1:策略模式 使用策略模式确实可以…...

【STM32】时钟树系统

1.时钟树简介 1.1五个时钟源 LSI是低速内部时钟,RC振荡器,频率为32kHz左右。供独立看门狗和自动唤醒单元使用。 LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。 HSE是高速外部时钟,可接石英*/陶瓷谐振…...

docker换源

文章目录 前言1. 查找可用的镜像源2. 配置 Docker 镜像源3. 重启 Docker 服务4. 查看dock info是否修改成功5. 验证镜像源是否更换成功注意事项 前言 在pull镜像时遇到如下报错: ┌──(root㉿kali)-[/home/longl] └─# docker pull hello-world Using default …...

百度在线分销商城小程序源码系统 分销+会员组+新用户福利 前后端分离 带完整的安装代码包以及搭建部署教程

系统概述 百度在线分销商城小程序源码系统是一款集分销、会员组管理和新用户福利于一体的前后端分离的系统。它采用先进的技术架构,确保系统的稳定性、高效性和安全性。该系统的前端基于小程序开发,为用户提供了便捷的购物体验和交互界面。用户可以通过…...

Flutter【组件】富文本组件

简介 flutter 富文本组件。 github地址: https://github.com/ThinkerJack/jac_uikit pub地址:https://pub.dev/packages/jac_uikit 使用方式 运行 flutter pub add jac_uikit组件文档 使用方式: HighlightedTextWidget.builder(text: &…...

中国恋爱交友相亲软件有哪些?大型婚恋相亲交友APP真实测评推荐

嘿嘿,当了29年的单身汪,这下总算不再单着啦!这两年把身边能找的人都找遍了,也没碰到合适的。没办法,就跑到网上去试试,坚持了有半年,可算有对象啦!下面给大家说说我用过的几个能脱单…...

快速欧氏聚类与普通欧氏聚类比较

1、前言 文献《FEC: Fast Euclidean Clustering for Point Cloud Segmentation》介绍了一种快速欧氏聚类方法,大概原理可以参考如下图,具体原理可以参考参考文献。 2、时间效率比较:快速欧氏聚类VS普通欧氏聚类 网上搜集的快速欧式聚类,与自己手写的普通欧式聚类进行对比,…...

如何让大语言模型在规格普通的硬件上运行 - 量化技术

近年来,大型语言模型(LLMs)的能力有了飞跃式的发展,使其在越来越多的应用场景中更加友好和适用。然而,随着LLMs的智能和复杂度的增加,其参数数量,即权重和激活值的数量也在增加,这意…...

shell printf详解

默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。 1. printf命令语法组成: printg format-string [arguments] 第一部分为格式化字符串,该字符串最好用引号括起来 第二部分为参数列表,例如字符串或变量值的列表,该列表需…...

【数据分析】用Python做事件抽取任务-快速上手方案

目录 方法一:使用OmniEvent库安装OmniEvent使用OmniEvent进行事件抽取OmniEvent优点缺点 方法二:使用大模型使用GPT网页版进行事件抽取事件类型列表 大模型优点缺点 总结 在自然语言处理(NLP)领域,事件抽取是一项关键任…...

B端系统门门清之:HRM,人力资源系统,公司发展的源动力。

人才是公司发展的源动力,针对公司复杂人力的管理就是HRM系统的核心功能,本文就带领大家详细认识一下HRM系统,分别从什么是HRM系统,作用、功能模块、颜值提升四个方面来阐述。欢迎大家点赞评论收藏转发。 一、什么是HRM系统 HRM系…...

tplink安防监控raw文件转码合成mp4的方法

Tplink(深圳普联)专业的网络设备生产商,属于安防监控市场的后来者。Tplink的安防产品恢复了很多,其嵌入式文件系统也一直迭代更新。今天要说的案例比较特殊,其不仅仅要求恢复,还要求能解析出音频并且要求画面和声音实现“同步”。…...

每天一个数据分析题(三百八十三)- 聚类

关于忽略自相关可以带来什么问题描述错误的是? A. 均方误差可能严重低估误差项的方差 B. 可能导致高估检验统计量t值,致使本不显著的变量变得显著了 C. 参数估计值的最小方差无偏性不再成立 D. 参数估计值的最小方差无偏性仍成立 数据分析认证考试介…...

构建下一代数据解决方案:SingleStore、MinIO 和现代 Datalake 堆栈

SingleStore 是专为数据密集型工作负载而设计的云原生数据库。它是一个分布式关系 SQL 数据库管理系统,支持 ANSI SQL,并因其在数据引入、事务处理和查询处理方面的速度而受到认可。SingleStore 可以存储关系、JSON、图形和时间序列数据,以满…...

【经验分享】Ubuntu24.04安装微信

【经验分享】Ubuntu24.04安装微信(linux官方2024universal版) 文章如下,22.04和24.04微信兼容 【经验分享】Ubuntu22.04安装微信(linux官方2024universal版) 实测Ubuntu24.04LTS版本可以兼容。...

AXI学习笔记

文章目录 AXI口诀:AXI三种总线,三种接口,一个协议背景知识一、 AMBA:二、AXI2.1 通信协议与握手机制2.2 AXI协议特点2.3 三种AXI总线类型(AXI4、AXI4-lite、AXI4-stream)2.3.1 AXI通道(5通道&am…...

Spring boot 启动报:Do not use @ for indentation

一、使用maven插件动态切换配置时出现报错 二、配置文件及pom 2.1 配置文件结构 2.2 application.yml spring: # 根据环境读取配置文件(手动) # profiles: # active: dev# 根据环境读取配置文件(通过勾选maven插件)profiles…...

【数据结构】排序(下)

个人主页~ 排序(上) 栈和队列 排序 二、常见排序的实现8、快速排序的优化9、非递归快速排序(1)基本思想(2)代码实现(3)时间复杂度(4)空间复杂度 10、归并排序…...

基于Java+Swing贪吃蛇小游戏(含课程报告)

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...

三角形法恢复空间点深度

三角形法恢复空间点深度 如下图,以图 I 1 I_1 I1​为参考,图 I 2 I_2 I2​的变换矩阵为 T T T。相机光心为 O 1 O_1 O1​和 O 2 O_2 O2​。在图 I 1 I_1 I1​中有特征点 p 1 p_1 p1​,对应图 I 2 I_2 I2​中有特征点 p 2 p_2 p2​。理论上直…...

Linux 阻塞和非阻塞 IO 实验学习

Linux 阻塞和非阻塞 IO 实验学习 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起&…...

JuiceFS 社区版 v1.2 发布,新增企业级权限管理、平滑升级功能

JuiceFS 社区版 v1.2 今天正式发布,这是自 2021 年开源以来的第三个大版本。v1.2 也是一个长期支持版本(LTS)。我们将持续维护 v1.2 以及 v1.1 这两个版本,v1.0 将停止更新。 JuiceFS 是为云环境设计的分布式文件系统,…...

虚拟3D沉浸式展会编辑平台降低了线上办展的门槛

在数字化浪潮的引领下,VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光,凭借优质的服务和丰富的经验,赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战,许…...

泛微E9开发 查询页面添加按钮,完成特定功能

查询页面添加按钮,完成特定功能 1、关联知识(查询页面实现新增按钮)2、功能实现2.1. 点击按钮,输出选中的checkbox的值2.2. 点击按钮,打开一个自定义对话框 3、实现方法 1、关联知识(查询页面实现新增按钮&…...

初学51单片机之数字秒表

不同数据类型间的相互转换 在C语言中,不同数据类型之间是可以混合运算的。当表达式中的数据类型不一致时,首先转换为同一类型,然后再进行计算。C语言有两种方式实现类型转换。一是自动类型转换,另外一种是强制类型转换。 转换的主…...

SpringBoot整合justauth实现多种方式的第三方登陆

目录 0.准备工作 1.引入依赖 2.yml文件 3. Controller代码 4.效果 参考 0.准备工作 你需要获取三方登陆的client-id和client-secret 以github为例 申请地址&#xff1a;Sign in to GitHub GitHub 1.引入依赖 <?xml version"1.0" encoding"UTF-8&quo…...

【Java算法】滑动窗口

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f456;一. 长度最小的子数组 题目链接&#xff1a;209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题&#xff0c;通过定义一…...

C# —— 属性和字段

属性和字段的区别 1.都是定义在一个类中&#xff0c;属于类成员变量 2.字段一般都是私有的private&#xff0c;属性一般是公开的Public 3.字段以小驼峰命名方式 age&#xff0c;属性一般是以大驼峰命名 Age 4.字段可以存储数据&#xff0c;属性不能存储数据&#xff0c;通过属性…...

公司电商网站开发方案/浙江新手网络推广

用如下博客中的方法打开两个UVC摄像头&#xff0c;我这里打开时&#xff0c;老是失败。 https://blog.csdn.net/pbymw8iwm/article/details/83989423 #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/…...

网站开发 发表文章/广州seo搜索

一、编辑器 1.链接 我们很多时候需要引用别人或自己以前的代码。这里可以很方便的加上链接。 一个添加链接 一个取消链接 选中要链接的文字右键就可以选中链接。 填入URL地址&#xff0c;目标一般选择在新窗口打开。 2.书签 插入书签 写入书签名 这样可以在文章开始写目录 跳到…...

安徽六安发现一例新冠阳性检测者/网页优化公司

在一个应用的整个开发过程中涉及到了无数的步骤。其中一些是应用的说明&#xff0c;图片的创作&#xff0c;应用的实现&#xff0c;和实现过后的测试阶段。写代码可能组成了这个过程的绝大部分&#xff0c;因为正是它给了应用生命&#xff0c;但是这样还不够&#xff0c;与它同…...

wordpress音乐模版/又有什么新病毒出现了

Nginx 支持以下命令行参数&#xff1a; ☆ -? | -h —— 打印命令行参数帮助。 ☆ -c file —— 使用一个可替代的配置文件代替默认文件。 ☆ -e file —— 使用一个可替代的文件错误日志文件来存储日志&#xff0c;代替默认文件(1.19.5)。特殊值 stderr 选择标准错误文件。 …...

上海网站建设 迈/百度指数的特点

Python# -*- coding: utf-8 -*- """ Time: 2018/9/26 Author: songhao 微信公众号: zeropython File: test_file_os.py """ import os import requests # 相对路径 print("相对路径","../") print("相对路径的父级&quo…...

汕头云建站模板/9个成功的市场营销案例

FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问&#xff08;文件上传、文件下载&#xff09;等&#xff0c;解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务&#xff…...