百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

C++程序员为何更倾向于造轮子而不是调包

toyiye 2024-06-21 12:38 13 浏览 0 评论

Hello,各位编程狮小伙伴们,这里是W3Cschool编程狮的小狮妹!


C++程序员,是不是有时让你感到好奇,他们不喜欢用别人写好的库和包,而是喜欢自己从零开始写代码。你是不是觉得这很奇怪,为什么他们不像其他语言的程序员一样,利用现成的工具来提高效率呢?


其实这背后有很多有趣的原因,它们反映了C++社区的一种独特文化。今天,我们就来一起探讨一下,C++程序员为什么爱造轮子?


性能至上


C++是一门被认为非常高效的语言,它可以让你直接操作内存和硬件,让你有机会写出速度很快的代码。这也要求你对算法和实现有足够的了解和掌握。如果你能做到这一点,那么你自己写出来的代码,有可能比别人写好的代码库还要快。


为什么呢?因为别人写好的代码库,通常要考虑很多不同的情况和需求,所以它们往往会包含很多额外的功能和判断。这些功能和判断,在某些情况下可能很有用,但在其他情况下可能就是多余的开销。而你自己写出来的代码,只需要满足你自己的需求,所以你可以省去那些对你无用的东西,只保留最核心和最必要的部分。


举个例子吧。假设你要做一个简单的事情:把一个字符串里面所有的字母都变成小写。如果你用别人写好的代码库,比如说std::transform或者boost::to_lower_copy之类的函数,它们会帮你把字符串里面所有的字符都转换成小写。但是它们也会同时处理一些特殊情况,比如说非英文字母、标点符号、空格等等。这些情况对于一般性的字符串处理可能很重要,但对于你特定的需求可能就没什么意义。



如果你自己写一个函数来做这件事情,你可以利用一个简单而有效的技巧:位运算。位运算就是直接对二进制数进行操作,它可以让你一次处理多个字符,而且速度非常快。比如说,如果你知道一个字符是大写字母,那么只要把它最高位(第7位)变成1就可以变成小写字母了。


所以你可以把字符串里面每8个字符组成一个64位整数(long long),然后对每个整数进行位运算,就可以把它们都变成小写字母了。当然了,这种方法也有一个缺点:它只能处理英文字母,如果你的字符串里面有其他的字符,它可能会产生一些奇怪的结果。


但是如果你能保证你的字符串只包含英文字母,那么这种方法就可以放心地使用了。而且,如果你有更好的硬件,比如说支持AVX512指令集的CPU,那么你甚至可以一次处理16个字符,速度就更快了。


这就是一个例子,说明了为什么C++程序员有时候会自己写代码,而不用别人的代码库。他们不是为了显摆自己有多厉害,也不是为了故意给自己找麻烦,而是为了追求最高的性能,满足最特定的需求。


自定义需求


C++程序员很在乎控制权。C++是一门给予你很大自由度的语言,它可以让你决定很多细节,比如说内存管理、异常处理、模板元编程等等。这些细节,如果处理得好,可以让你的代码更灵活、更稳定、更优雅。但是如果处理得不好,就可能会导致很多问题,比如说内存泄漏、段错误、编译错误等等。


所以,C++程序员通常喜欢对自己的代码有完全的控制权,他们不喜欢被别人的代码库限制或者干扰。他们想要知道自己的代码到底在做什么,为什么要这么做,有没有更好的办法。他们不想要盲目地信任别人的代码库,也不想要被别人的代码库牵着鼻子走。


假设你要做一个复杂的数学计算,比如说求解一个非线性方程组。如果你用别人写好的代码库,比如说Eigen或者Armadillo之类的矩阵库,它们会帮你提供很多方便的函数和类,让你可以很容易地定义和操作矩阵和向量。



但是它们也会同时隐藏很多细节,比如说矩阵的存储方式、运算的优化策略、误差的控制等等。这些细节对于一般性的数学计算可能不太重要,但对于你特定的需求可能就很关键。


如果你自己写一个函数来做这件事情,你可以根据你自己对问题的理解和分析,选择最合适的算法和数据结构。比如说,你可以选择用牛顿法或者高斯-赛德尔法来求解方程组,你可以选择用稀疏矩阵或者密集矩阵来存储数据,你可以选择用浮点数或者定点数来表示数值,你可以选择用迭代或者递归来实现算法等等。这些选择都会影响到你代码的效率和精度。


这就是另一个例子,说明了为什么C++程序员有时候会自己写代码,而不用别人的代码库。他们不是为了显示自己有多聪明,也不是为了故意给自己找难题,而是为了拥有最大的控制权,满足最精确的要求。


独立性强


C++程序员还有一个特点,就是他们很在乎自己的独立性。他们不想让自己的代码受到外部的影响或者限制,他们想要让自己的代码能够在任何地方、任何时候、任何情况下都能正常运行。这也是为什么他们有时候会自己写代码,而不用别人的代码库。


你可能会问,为什么C++程序员要这么在乎独立性呢?难道用别人的代码库不是更方便、更快捷、更安全吗?其实不一定。在C++世界里,用别人的代码库并不是一件轻松的事情。


有时候,你可能需要花费很多时间和精力来解决各种各样的问题,比如说依赖关系、版本冲突、环境配置、编译选项等等。这些问题往往很复杂,不像其他语言那样有一个统一的包管理工具来帮你自动处理。更糟糕的是,外部代码库会有一些隐藏的缺陷或者漏洞,这些缺陷或者漏洞可能会在某些情况下导致你的代码出错或者崩溃。



如果你自己写一个函数来做这件事情,你可以避免这些问题,因为你只需要依赖自己的代码和标准库。你可以更好地控制你的代码的质量和安全性,你也可以更容易地调试和修改你的代码。


?这就是最后一个例子,说明了为什么C++程序员有时候会自己写代码,而不用别人的代码库。他们不是为了孤芳自赏,也不是为了逃避责任,而是为了保持最高的独立性,满足最广泛的需求。


结语

总结一下吧。C++程序员为什么爱造轮子?小狮妹觉得主要有三个原因:性能至上、控制权重要、独立性强。这三个原因都跟C++这门语言的特点和目的有关。


当然了,并不是所有的C++程序员都爱造轮子,也并不是所有的情况都需要造轮子。有时候,用别人写好的代码库也是一种明智和高效的选择。关键是要根据自己的实际情况和需求,做出合理和适当的判断。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码