C++的哲学思想

news2024/9/27 9:28:44

C++的哲学思想

文章目录

  • C++的哲学思想
  • 💡前言
  • 💡C++的哲学思想
    • ☁️C++底层不应该基于任何其他语言
    • (汇编语言除外)
    • ☁️只为使用的东西付费
    • (不需要为没有使用到的语言特性付费)
    • ☁️以低成本提供高级抽象
    • (更高级的目标是0成本提供高级抽象)
  • ⭐END
    • 🌟跋
    • 🌟交流方式

💡前言

在很多领域,有些东西是永恒的。而在 C++ 中有下面三条哲学思想便属于这一类:

  1. C++底层不应该基于任何其他语言
  2. 只为使用的东西付费
  3. 以低成本提供高级抽象

向我们的 C++之父 Bjarne Stroustrup 致敬!

Bjarne Stroustrup’s Homepage

在这里插入图片描述

注意:本文并不攻击其他任何语言。

💡C++的哲学思想

☁️C++底层不应该基于任何其他语言

(汇编语言除外)

如果一个语言的目标就是成为正真的高级,那他就必须把做系统程序的设计工作让给其他语言。比如java,python等。这就不得不同时记住两种语言的原语和准则。

C++ 试图给出另一条路,它提供了低级特性和抽象机制,支持这两种东西构造混合的系统。

☁️只为使用的东西付费

(不需要为没有使用到的语言特性付费)

对于规模较大的语言,有一种论断人人皆知,说它们会产生大而慢的结果代码。

如:

由于支持某种特性,使得这个开销遍布于整体,如 java 的很多类型必须开启在堆区,而 C++ 可以自由的在堆或栈创建需要的对象。

还有比如在 C++11 推出的std::thread,没有自动join的机制,在 C++20 推出了std::jthread弥补了这一缺陷。而不是直接在原有的std::thread中修改。因此在以往的代码中,使用者应该清晰的知道自己使用std::thread的代价(如效果,内存大小等),不能因为被后续的规定影响以往的代码。保证十年前的代码,在十年后编译还能表现一致的效果。

这个规则在 C++ 的设计决策中不断成为最关键的考虑。虚函数,多重继承,运行时的类型识别,异常处理和模板,都是与此有关的特性实例。

☁️以低成本提供高级抽象

(更高级的目标是0成本提供高级抽象)

如果像拒绝人们建议一个特性,0开销原则可能是所有规则中最锋利的一个。

但一切都是折中的,这正是设计的美妙所在。

下面是0开销原则的一个经典应用:这是一个时间单位转换问题的小例子。

以第一段代码的风格写更容易出错。

而第二段代码,更抽象,且不会付出格外的代价。两者生成的汇编代码可以达到一致的效果。

struct Duration {
    int millis_;
};

void example() {
    auto d    = Duration{};
    // 毫秒
    d.millis_ = 100;

    // 秒
    auto timeout = 1;
    // 直接将秒在没*1000情况下,直接赋值到毫秒上
    d.millis_    = timeout;
}
#include <chrono>

using namespace std::literals::chrono_literals;

struct Duration {
    std::chrono::microseconds millis_;
};

void example() {
    auto d    = Duration{};
    // 编译错误
    // d.millis_ = 100;
    // 效果一致,且表达更清晰
    d.millis_ = 100ms;

    // 或者写 `std::chrono::seconds(1)`
    // 但`1s`能更抽象,清晰,简洁
    auto timeout = 1s;
    // 由程序自动帮你做转换
    d.millis_    = timeout;
}

⭐END

🌟跋

ref:

现代C++软件架构:方法与实践 (豆瓣) (douban.com)

《现代C++软件架构》

1.6 C++的哲学思想

p7

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

《C++语言的设计和演化》

4.5 低级程序设计支持规则

p117

(C++语言的设计和演化) C++的设计理念-CSDN博客

🌟交流方式

⭐交流方式⭐ |C/C++|算法|设计模式|软件架构-CSDN社区

关注我,学习更多C/C++,python,算法,软件工程,计算机知识

B站:

👨‍💻主页:天赐细莲 bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

exBase

1.准备工作 1.端口配置 下列为默认端口号&#xff0c;若部分端口号已被占用&#xff0c;用户可以根据实际情况进行修改。 端口号 说明 31030 exBase默认端口 31003 配置库默认端口 2181 zookeeper默认端口 9092 kafka默认端口 8091 metaNode的RPC端口 8092 node…

【Linux】进程管理:从理论到实践(一)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a; &#x1f525; 进程的基本概念 二&#xff1a; &#x1f525; 描述进程-PCB三&#xff1a; &#x1f525; 查看进程 &#x1f95d; 通过系统目录&#x1f95d; 通过ps命…

小程序视频编辑SDK解决方案,轻量化视频制作解决方案

面对小程序、网页、HTML5等多样化平台&#xff0c;如何轻松实现视频编辑的轻量化与高效化&#xff0c;成为了众多开发者和内容创作者共同面临的挑战。正是洞察到这一市场需求&#xff0c;美摄科技推出了其领先的小程序视频编辑SDK解决方案&#xff0c;为创意插上翅膀&#xff0…

线性代数(持续更新)

一.矩阵及其计算 1.矩阵的概念 矩阵就是一个数表 元素全是0&#xff0c;是零矩阵&#xff0c;用0来表示 当mn时&#xff0c;称为n阶矩阵&#xff08;方阵&#xff09; 只有一行的叫行矩阵&#xff0c;只有一列的叫列矩阵 只有对角线有元素的叫做对角矩阵&#xff0c;用dia…

FTP被动模式配置

FTP被动模式配置 非云服务器或未开启防火墙的服务器不需要设置 背景&#xff1a; 某些FTP客户端与FTP服务器进行数据交互时&#xff0c;客户端数据传输使用的是被动模式&#xff1b; 被动模式会导致服务端的数据通道端口随机变动&#xff0c;服务器的防火墙无法设置放行规则…

Excel数据检视——对角线连续数据连线

实例需求&#xff1a;数据表如下图所示&#xff0c;现需要根据规则&#xff0c;在符合要求的单元格上&#xff0c;添加连线。 连续单元格位于对角线方向单元格内容相同连续单元格数量不少于7个 示例代码如下。 Sub LT2RB()Dim objDic As Object, rngData As Range, bFlag As …

基于springBoot校园健康驿站管理平台(源码+教程)

互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#xff0c;劳…

开源标注工具

DoTAT https://github.com/FXLP/MarkTool 后端代码未开放&#xff0c;可能有数据泄露风险 Chinese-Annotator https://github.com/deepwel/Chinese-Annotator 安装非常麻烦&#xff0c;github更新频率比较低&#xff0c;支持功能和doccano类似 IEPY https://github.com/ma…

头戴式蓝牙无线耳机哪个牌子比较好?头戴式蓝牙耳机排行榜盘点

在当今快节奏的生活中&#xff0c;音乐已成为我们不可或缺的精神食粮&#xff0c;而一款优秀的头戴式蓝牙无线耳机&#xff0c;不仅能为我们带来高品质的音频享受&#xff0c;还能让我们在繁忙的生活中找到片刻的宁静与放松&#xff0c;那么头戴式蓝牙无线耳机哪个牌子比较好&a…

【工具变量】数字技术应用广度与深度数据集(2001-2023年)

数据简介&#xff1a;数字技术应用广度是指企业为了实现收集、存储与处理海量数据时所需要的技术支撑&#xff0c;诸如大数据、云计算、区块链等等。数字技术应用深度包括数字化管理和数字化生产。其中&#xff0c;数字化管理是指企业应用数字技术实现组织、生产、销售和服务智…

Unreal Engine 5 C++: Asset Batch Duplication插件编写02

目录 准备工作 "Scripting library" 三个最重要的功能&#xff08;前两个是UEditorUtilityLibrary中的&#xff09; 自动创建声明&#xff1a; TArray T 的含义 F 的含义 Live Coding &#xff08;Ctrlalt F11&#xff09; Live Coding 的工作流程&#xff…

uni-app - - - - - 实现锚点定位和滚动监听功能(滚动监听功能暂未添加,待后续更新)

实现锚点定位和滚动监听功能 1. 思路解析2. 代码示例 效果截图示例&#xff1a; 点击左侧menu&#xff0c;右侧列表数据实现锚点定位 1. 思路解析 点击左侧按钮&#xff0c;更新右侧scroll-view对应的scroll-into-view的值&#xff0c;即可实现右侧锚点定位滚动右侧区域&am…

攻防世界--->robots

学习笔记。 robots&#xff1a; 得&#xff0c;就是隐藏某些东西呗。 - - 好吧&#xff0c;还是不会。 参考&#xff1a; 攻防世界——新手区——robots_robots flag-CSDN博客https://blog.csdn.net/weixin_45864041/article/details/108036234 突破点&#xff1a; so&#…

u-navber自定义导航栏搜索框

效果 代码 <template><view><u-navbar :is-back"false"><view class"navbar"><view class"search"><image src"../../static/my_device/search_icon.png" class"search_image"></i…

代码随想录算法day40 | 动态规划算法part13 | 647. 回文子串,516.最长回文子序列

647. 回文子串 动态规划解决的经典题目&#xff0c;如果没接触过的话&#xff0c;别硬想 直接看题解。 力扣题目链接(opens new window) 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的…

箱包发霉怎么清洁霉斑 工厂箱包发霉翻箱处理方法

箱包是我们日常生活中的必备品&#xff0c;随着箱包工厂订单不断&#xff0c;但工厂最头疼的就是会经常遇到批量的箱包出现发霉的问题。一旦发霉&#xff0c;并要面临一笔巨额索赔问题&#xff0c;尤其出口到国外发霉了&#xff0c;经ihaoer防霉人士介绍一种简单有效的方法&…

apple developer 开发者账号被停用,提示Locked,终于解决了

事情是这样的&#xff0c;9.11我们要发布app的时候&#xff0c;一直登录不上。然后联系了苹果客服&#xff0c;告知账号不活跃。于是让我们通过活跃申请、以及重置密码申请操作来解决。 然后&#xff0c;操作一遍又一遍&#xff0c;都解决不了。 后来联系可国外的客服&#…

新能源行业的福音,复合机器人助力打造智能无人化充电站

随着工业自动化和智能化水平的不断提升&#xff0c;无人化作业已成为现代生产线的必然趋势。在山西地区的室内生产条件下&#xff0c;富唯智能凭借其在自卸车充电系统领域的深厚积累&#xff0c;成功设计出一套高效、稳定的自卸车自动充电系统&#xff0c;为工业领域带来革命性…

ssm协同办公系统-计算机毕业设计源码42133

摘要 随着信息技术的迅猛发展&#xff0c;协同办公系统在企业和组织中扮演着越来越重要的角色。本研究旨在基于SSM框架、Java编程语言和MySQL数据库&#xff0c;设计和开发一个协同办公系统。首先&#xff0c;介绍了协同办公系统的背景和意义&#xff0c;详细阐述了系统的功能模…

Git - 版本管理

本文我们来介绍下 Git 管理版本的几个常用命令。 ‍ git log&#xff1a;查看提交日志 随着对文件的不断修改与提交&#xff0c;Git 帮我们管理了之前的各个版本。就好比玩一个能存档的游戏&#xff0c;每过一关就能帮我们存档&#xff0c;如果某一关没打过&#xff0c;就可…