您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

为何某些公司不允许使用 C++ STL?

时间:2023-01-15 15:36:28  来源:  作者:那就随梦而飞

最初开始禁用 C++ STL,更多的是早期项目编码实践中留下的惯例,被后来的程序员继承下来。老项目中这种选择尤其地多。不过如果有人将其上升到公司行为在不同项目中全面禁用 STL,则没有必要,而且我倾向于做这种决定的人并不理解 C++ 编译系统。

一般来说,项目中禁止用 C++ 多见于两种具体场景:或者项目的产出产品为函数库或者需要引用第三方函数库。常见的是会限制STL的某些容器使用,因为有些容器的操作线程不安全,内存管理也不高效。

但是要是完全禁止STL,也无意义因噎废食。STL包罗的东西很多除了容器还有算法、函数对象等。算法是相当方便的轮子,佩服STL的作者Alex Stepanov,将复杂、相似的问题用算法、迭代器、函数对象这种抽象来解决。

游戏后端不用stl是祖传代码留下来的陋习,最开始服务端代码上来就申请一大块共享内存,重载new,用pod方式存放有限玩家数据。

1、性能 随着C++11标准在各大编译器的实现,有了move和rvalue,STL的性能不会是瓶颈,而且另一方面,既然程序要最高的性能,但选择了C++语言而不是C或者assemble,看来还是看重C++的抽象能力。

2、不愿使用异常。如今除了 Android 上的 STLPort 关闭异常,大部分主流 C++ STL 实现里都无法脱离异常使用 STL。异常带来的问题主要是两个:性能下降,代码膨胀。

3、C 兼容。严格地说,STL 在这个问题上算是躺枪,这个坑在很多具体的场景中也是因为异常而引入,但这个问题的麻烦程度比前两个问题更高。比如 gcc 在编译纯 C 代码时默认关闭 -fexceptions 选项,因此这样编译出来的代码中没有异常处理相关的栈展开。

说到底还是因为人的(最低)水平不行。C++语言特性太丰富,轻轻松松就能写出。尤其是新手,最喜欢把代码写得fancy而不是bug-free。团队里只要有几个这样的人,整个项目就完蛋了。

STL展现的思想是基于模板的静态类型系统的一个极致。这也是为什么更多的主流语言加入模板支持的原因。

顺便说一下3ds Max内部实现代码用的是Peer Review模式,只需要有任意的另一个Code Reviewer审核过代码,就可以合并到开发分支。

C++对模板的支持语法上有点复杂, 语义上由于C++类型系统的不完备也略显冗余,但是其外部效果应该是完全达到了。

Reviewer会质疑任何有潜在问题的改动,包括各种C++问题,比如是否做到向前兼容、向后兼容、二进制兼容,是否有业务上的逻辑问题,是否符合C++的代码规范和最佳实践,是否测试过重要的第三方插件等等。

按照Dr Stroustrup的说法(Element of Programming的评语),“... contains some of the most beautiful code I have ever seen.”。TG:li9047



Tags:C++   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最初开始禁用 C++ STL,更多的是早期项目编码实践中留下的惯例,被后来的程序员继承下来。老项目中这种选择尤其地多。不过如果有人将其上升到公司行为在不同项目中全面禁用 STL...【详细内容】
2023-01-15  Tags: C++  点击:(0)  评论:(0)  加入收藏
概念 类模板 std::function 是通用多态函数包装器。 std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——...【详细内容】
2023-01-12  Tags: C++  点击:(8)  评论:(0)  加入收藏
C 是用于开发系统软件和任何微处理器软件的经典语言。 Linux,大部分Windows和MacOS都是写在上面的。 如果你使用任何现代可穿戴小工具或电子设备,在大多数情况下它们也会在 C...【详细内容】
2023-01-07  Tags: C++  点击:(5)  评论:(0)  加入收藏
导读:使用 C 扩展为 Python 提供特定功能。本文字数:7993,阅读时长大约: 9分钟 使用 C 扩展为 Python 提供特定功能。 在前一篇文章中,我介绍了 opensource.com。在大多数系统上,C...【详细内容】
2023-01-03  Tags: C++  点击:(24)  评论:(0)  加入收藏
CLion是一款专为开发C及C++所设计的跨平台IDE。它是以intellij为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows...【详细内容】
2022-12-27  Tags: C++  点击:(27)  评论:(0)  加入收藏
我们可以通过 时间度量 - Wall time vs. CPU time 来知道Wall time和CPU time的区别是什么,简单来讲,Wall Time就是类似我们的时钟一样,他没有很精确的表示此时CPU花了多少时...【详细内容】
2022-12-23  Tags: C++  点击:(24)  评论:(0)  加入收藏
数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。C++语言支持广泛的数据类型,如下: 数据类型选择: 当明确知道数值不可能为负时,选用无符号类型。 使用...【详细内容】
2022-12-08  Tags: C++  点击:(34)  评论:(0)  加入收藏
本文介绍基于C++语言,遍历文件夹中的全部文件,并从中获取指定类型的文件的方法。 首先,我们来明确一下本文所需实现的需求。现在有一个文件夹,其中包含了很多文件,如下图所示;我...【详细内容】
2022-11-16  Tags: C++  点击:(42)  评论:(0)  加入收藏
作者 | 苏宓出品 | CSDN(ID:CSDNnews)如果说此前 Kotlin、Dart、Julia、Carbon 等后起之秀向老牌编程语言发起挑战进攻都是小打小闹,那么这一次 C、C++ 这几种常青藤编程语言则...【详细内容】
2022-11-15  Tags: C++  点击:(42)  评论:(0)  加入收藏
T[N]Built-in array: a fixed-size contiguously allocated sequence of N elements of type T; implicitly converts to a T*内置数组:固定大小的连续分配的T型N个元素序列;...【详细内容】
2022-11-07  Tags: C++  点击:(83)  评论:(0)  加入收藏
▌简易百科推荐
对于广大C语言开发者来说,缺乏类似C++ STL和Boost的库会让开发受制于基础库的匮乏,也因此导致了开发效率的骤降。这也使得例如libevent这类事件库(基础组件库)一时间大红大紫。...【详细内容】
2023-01-16  码哥比特  今日头条  Tags:C语言   点击:(1)  评论:(0)  加入收藏
最初开始禁用 C++ STL,更多的是早期项目编码实践中留下的惯例,被后来的程序员继承下来。老项目中这种选择尤其地多。不过如果有人将其上升到公司行为在不同项目中全面禁用 STL...【详细内容】
2023-01-15  那就随梦而飞     Tags:C++   点击:(0)  评论:(0)  加入收藏
概念 类模板 std::function 是通用多态函数包装器。 std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——...【详细内容】
2023-01-12  骇客遇见AI  今日头条  Tags:C++   点击:(8)  评论:(0)  加入收藏
C 是用于开发系统软件和任何微处理器软件的经典语言。 Linux,大部分Windows和MacOS都是写在上面的。 如果你使用任何现代可穿戴小工具或电子设备,在大多数情况下它们也会在 C...【详细内容】
2023-01-07  启辰8  今日头条  Tags:C++   点击:(5)  评论:(0)  加入收藏
众所周知,C语言在嵌入式开发中占据着十分重要的地位,为什么嵌入式开发要选择C语言?嵌入式开发的方向可以分为单片机开发、Linx应用开发和现场可编辑逻辑门阵列(FPGA)开发,不同于...【详细内容】
2023-01-03  沐沐渥生    Tags:嵌入式开发   点击:(2)  评论:(0)  加入收藏
一:背景1. 讲故事前些天看到一个奇怪的 Function 函数,调用的是 C# 链接库中的一个 UserLogin 方法,参考代码如下:CREATE FUNCTION dbo.clr_UserLogin( @name AS NVARCHAR(1...【详细内容】
2023-01-03  一线码农聊技术  今日头条  Tags:C#   点击:(21)  评论:(0)  加入收藏
CLion是一款专为开发C及C++所设计的跨平台IDE。它是以intellij为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows...【详细内容】
2022-12-27    网易号  Tags:C++   点击:(27)  评论:(0)  加入收藏
我们可以通过 时间度量 - Wall time vs. CPU time 来知道Wall time和CPU time的区别是什么,简单来讲,Wall Time就是类似我们的时钟一样,他没有很精确的表示此时CPU花了多少时...【详细内容】
2022-12-23  编编成程  今日头条  Tags:C++   点击:(24)  评论:(0)  加入收藏
数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。C++语言支持广泛的数据类型,如下: 数据类型选择: 当明确知道数值不可能为负时,选用无符号类型。 使用...【详细内容】
2022-12-08  西子浣纱城  今日头条  Tags:C++   点击:(34)  评论:(0)  加入收藏
本文介绍基于C++语言,遍历文件夹中的全部文件,并从中获取指定类型的文件的方法。 首先,我们来明确一下本文所需实现的需求。现在有一个文件夹,其中包含了很多文件,如下图所示;我...【详细内容】
2022-11-16  疯狂学习GIS  CSDN  Tags:C++   点击:(42)  评论:(0)  加入收藏
站内最新
站内热门
站内头条