首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

曾遭 Linus 炮轰“很烂”的 C++,现受开发者支持:Linux 内核应从 C 转到 C++

Peter Anvin 说道,“让有此感觉的真正原因是,Linux 最近提出的许多针对 GCC 扩展的要求,其实在标准 C++容易实现,而且许多情况下,无需修改全局代码即可改进基础架构。”...那时的 Linus 也给出了自己不看好在 Linux 内核上用 C++ 的几层理由: 使用 C++ 库(例如 STL 和 Boost)可能会带来问题。...同时网友给出一个C++ 代替 Rust 的解决方案时,Linus 依然忍不住地说道:“C++ 根本解决不了 C 语言的问题,它只会让事情变得越来越糟。...希望 Linus 对 C++ 的看法在过去二十年中有所改变,因为从那时起,C++ 已经成为一种大不相同(而且更好)的语言。...希望他们能选择与 C++ 不同的东西,也许是 Zig。C++问题在于,就像 Scala 一样,你很难坚持使用一个子集,而不会在事后意识到你使用了超出预期的内容。

37310

字节跳动凉面(抖音C++)(问题+解答)

字节官网投了简历,过了一天突然收到hr电话,问我工作倾向于北京还是上海,说上海,然后hr说把简历转给抖音上海hr....又过了一天(清明节前一天),再次突然收到hr电话,说简历还行,可以免笔试直接安排面试...一面(问题前后顺序记不太清,但大致有序,以下是问题和我当时的大概回答): 1、自我介绍 2、你面的是C++岗是吧,现在拿了几个offer,是哪几家 3、问问题环节:选一个你熟悉的语言,程序从源代码文件到运行...假设A B两个人玩游戏,我们规定这样一个规则:抛掷这枚硬币1次,正面向上则A获胜,反面则B胜,显然这个规则是不公平的,因为p不是1/2。...,像引用和指针得区别这种概念性得问题基本不问,提的问题 偏重对底层机制的比较详细的分析。...第二道也不是流利。。    字节看重算法编程能力,应该是死了第一题,一面后面试官问有什么要问的,说如果还有二面会在今天一天内进行。。。结果一下午还是没有通知,确定是凉了。。。

1.8K00
您找到你想要的搜索结果了吗?
是的
没有找到

面向对象的代码风格(上)

由于对修改内存的代码没有限制,会让逻辑错误难以跟踪。代码由于不确定内存状态,导致代码复用的时候,也能难保证稳定性。...然后“继承”最受诟病的问题,是对于同一个基类的属性继承后,子类对象就打破了封装,可以不受既有代码控制下修改状态。...这些系统大多数完成新功能的同时,还需要保持旧能力的稳定。 最简单的做法就是利用继承来扩展旧的类,添加新的功能。这样的做法不能说是很好,但在实际环境下,往往是唯一可行的方案。...因此,真正决定用模板而不是多态,往往还是由于C++没有反射功能:当我们在编写一些期望“通用”的代码时,往往希望“类”能与其他一些概念对应起来: ORM中,我们希望类结构映射成表; RPC中,我们希望类结构映射成通信协议...先说说名词化建模:结构化编程中,我们对于业务逻辑往往是用动词化建模的,也就是把问题分拆成一个个流程,然后再把每个流程拆分成几个更细节的子流程。并且以这些流程为功能范围建立函数。

1.3K80

c++基础之变量和基本类型

之前写过一系列的c/c++ 从汇编上解释它如何实现的博文。从汇编层面上看,确实c/c++的执行过程清晰,甚至有的地方可以做相关优化。...如果将程序分为多个文件,则需要一种文件中共享代码的方法。c++中这种方法是将声明与定义区分开来。之前的博客中,有对应的说明。...&rp = pi; //定义一个引用,它指向一个指针 int& *pr = &ri; //试图定义一个指向引用的指针错误 对于这种变量定义中既有指针又有引用的情况下,想要知道它到底是指针还是引用,可以从右至左理解...有auto关键字并不能说c++是动态类型的语言,动态类型是指,在运行过程中能随意改变变量所存储的数据的类型。...auto有一个问题,那就是必须用表达式的值来初始化变量,但是有些时候只想用这个表达式值的类型来决定变量的类型,不想用这个值来初始化的变量。或者不想对变量初始化。

1.5K30

Rust 生态纯属炒作?3 年写了 10 万行代码的开发者吐槽:当初用 Rust 是被忽悠了

但我想强调一点,花掉了大约三年的时间, Rust 的整个框架 / 引擎生态系统中编写了超过 10 万行游戏相关代码之后,发现很多(甚至是大多数)问题仍然存在。...第一种情况下出现了一个无效指针,这时候如果我们拥有一个索引并删除了一个元素,则该索引可能仍然有效但指向其他内容。...乍看之下,用预先准备的泛型系统也可以设计出这样的游戏,但这又是觉得大多数人在游戏开发中犯的另一个错误。...但我想提醒大家,作为一线游戏开发者,Rust 的这种毛病已经导致浪费了大量时间,只为给错误问题找个所谓的合理答案。...游戏代码中,内容最终必须被打包在 Mutex或 AtomicRefCell中,从而“避免像 C++ 编程时那样忘记同步访问可能引发的问题”。

18810

游戏编程十年总结

于是出了人生中的第一个游戏一个猜数字的小游戏,并尝试着改变游戏的规则,制作类似石头剪刀布这样的游戏。 ?...虽然写出了一些简单的游戏但我想写的远不止这些,想变强啊啊啊!!!...入职之前BOSS就给我描绘了一下美好的未来,C++服务端这个部门现在就你和另外一个工作一年的程序,但是马上会有3位经验丰富的大牛入职,其中有超过10年经验的大神,而且我们还有一位非常强力的技术支持——...但我完全没有接触过Unity3D,多次的开会讨论都没有得出一个好的结果,因为这种框架虚,如果说有这样一套框架的话,那不就是Unity本身吗?...愣了一下,刚刚明明Cocos2d-x相关的问题一个都没难倒好吗,并且有些问题还提出了比他们现在更好的实现方式,已经用Cocos2d-x做了四五个游戏了,那本Cocos2d-x的书也已经完成了第一次重构了

2.7K92

游戏编程十年总结

于是出了人生中的第一个游戏一个猜数字的小游戏,并尝试着改变游戏的规则,制作类似石头剪刀布这样的游戏。 ?...虽然写出了一些简单的游戏但我想写的远不止这些,想变强啊啊啊!!!...入职之前BOSS就给我描绘了一下美好的未来,C++服务端这个部门现在就你和另外一个工作一年的程序,但是马上会有3位经验丰富的大牛入职,其中有超过10年经验的大神,而且我们还有一位非常强力的技术支持——...开发的沟通过程中,感觉并不是靠谱,因为游戏不好玩,美术不好看,很多东西反而要去催。...愣了一下,刚刚明明Cocos2d-x相关的问题一个都没难倒好吗,并且有些问题还提出了比他们现在更好的实现方式,已经用Cocos2d-x做了四五个游戏了,那本Cocos2d-x的书也已经完成了第一次重构了

2.7K40

Debug和Release之本质区别

C++ 的强类型特性能检查出大多数这样的错误,但如果用了强制类型转换,就不行了。你可以 Release 版本中强制加入 /Oy- 编译选项来关掉帧指针省略,以确定是否此类错误。...如果你的程序是多线程的,或者你发现某个变量的值与预期的不符而你确信已正确的设置了,则很可能遇到这样的问题。这种错误有时会表现为程序最快优化出错而最小优化正常。...例如,函数中有一个未被使用的变量, Debug 版中它有可能掩盖一个数组越界,而在 Release 版中,这个变量很可能被优化调,此时数组越界会破坏栈中有用的数据。当然,实际的情况会比这复杂得多。...这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也容易辨认,因此这很有利于 Debug ...,这有可能使指针指向一个有效地址而掩盖了非法访问。

3.6K90

《AI寒冬将至》作者:人工智能存在十大问题

最近几周,被迫重新思考和总结对AI的看法。《AI寒冬将至》那篇帖子广为传播后,很多人通过电子邮件和twitter联系,提出了很多好的建议。...我们完全忽略这样一个事实:对智能的最终判断由现实本身,而不是由一个人类组成的委员会作出。 3. 我们的模型甚至可能起作用,但往往是出于错误的原因。...但反过来就不成立了:构建在玩固定规则游戏时胜过人类能力的机器,跟构建一个能够玩“规则不断变化的游戏”的系统差得远了。 5. 物理现实中有一些规则是不变的——即物理定律。...不过,这是一个与实现(implementation)相关的问题认为它没有明确的答案。我们未来的发展中,确信我们会使用两者的结合。 2. 学习特征还是人工构建的特征?这是一个相关的问题。...确定是否有强有力的证据证明量子计算在解决智能问题方面有必要性,尽管我们可能会发现它是必要的。这些都是“如何做?”(how)的问题但我的主要兴趣还是“是什么?”(what)的问题

37900

令人沮丧的C++性能调试

公平地说,这更像是用词不当——“抽象经过优化后可能提供零运行时开销”这样的说法可能会更恰当一些,但我知道为什么不是这么回事…… 大多数 C++ 程序员倾向于接受这样一个事实——“零成本抽象”只启用了优化的情况下才能提供零运行时开销...然而,在过去的几年里,开始意识到,某些领域拥有高性能调试和快速编译是多么的重要,比如游戏开发。...从事游戏开发的人往往直言不讳地说 C++ 的抽象与他们的工作格格不入,而且他们有充分的理由——游戏是实时模拟的,即使调试版本中也需要可玩性和响应性——想象一下 20FPS 左右的帧率下调试虚拟现实游戏导致眩晕的情形...也没有任何证据证明这一点,但我怀疑,怀着优化调试体验的愿望编写低级代码最终会增加调试的频率。...这是一个恶性循环! 调试模式下启用优化 知道你在想什么——你认为这些游戏开发者无能,因为他们可能一直使用 -Og! 你错了。 首先,-Og 只 GCC 上可用。

94320

三年全职 Rust 游戏开发,真要放弃 Rust 吗?

作者列举了三个问题: 具有实际指针指针型数据。问题很简单,如果字符 A 跟随字符 B,而 B 被删除(并被释放),那么指针将无效。 Rc> 结合弱指针。...“全局状态因错误原因而令人讨厌,游戏是单线程的” 对全局状态的整体“厌恶”是一个光谱,大多数人不会完全反对它。但是讨论游戏开发时,作者认为这是个错误的方向。...游戏代码中,我们不得不将一些东西包装在 Mutex 或 AtomicRefCell 中,不是为了“避免C++ 时遇到的问题”,而是为了满足编译器对于使所有东西都线程安全的全面渴望,即使整个代码库中没有一个...直接批评所写的内容时,对于“现在只是解决问题,以后再修复”和“快速高效的代码”之间的认知失调感非常强烈。(编辑:认知失调是正常的!也有罪。喜欢动物,但我吃肉。某种程度的认知失调是无法避免的。)...但我相信大多数独立游戏开发者不只是每个月写一个游戏。这些游戏很大程度上都不会取得任何成功。而且,如果其中一个游戏确实取得了成功,那么他们就需要修复错误。支持他们无法访问的硬件配置。

25810

为拯救童年回忆,开发者决定采用古法编程:用Flash高清重制了一款游戏

决定离线光栅化它们并将光栅文件打包到游戏中。游戏运行时将它们光栅化并成为这个微小的可执行文件会很有趣,但我不想拥有那些额外的移动部件。...「面向对象」目前游戏开发圈子里并不流行,但我使用的是 Flash,所以显然不关心这个问题。 Hapland 使用的 Flash 功能,如颜色变换和遮罩,都是存在的。...如今最常见的纵横比似乎是 16:9,16:10 笔记本电脑上也流行。希望游戏在其中任何一个方面看起来都不错,没有任何黑条或拉伸。...必须承认,这些设想都没有获得实践。这些半透明的东西 Flash 和游戏中看起来不对劲,只是逐渐调整图形直到游戏看起来没问题。...从互联网上找到了一位音乐家来做标题屏幕音乐,并自己录制了一些吉他和弦作为片尾字幕,它们淹没在效果中,所以你不能说吉他学得不好。 工具上,根据音乐使用 Logic 或 Live。

46910

势头强劲的 Python PK 强大的 C++,究竟谁更胜一筹?

执行Python代码时,我们会遇到运行时错误。如果在生产运行时中遇到类型错误,就很尴尬了! 值得一提的是,为了实现可以在运行之前就发现问题的Python解决方案,许多开发人员花费了大量时间和精力。...05 C++指针,但Python没有 谈论C++,怎么能不提指针? Python中没有指针,至少没有开箱即用的指针。但是,C++中有指针。 首先,让我们来解释一下指针是什么。 假设有一个变量。...这个变量是一个整数,值设置为5。那么,变量与它的值是一个意思,比如x = 5,x是变量的名称,值为5。 C++中,变量是通过值传递给函数的。 那么问题在于,这些值保存在哪里?...也就是说,函数执行完成后,x的值为2437。 指针的看法 使用指针的原因之一在于,你可以调用的函数中修改变量或对象。但是,建议尽量避免使用指针。...C++中,使用引用比使用指针更好,因为你可以轻松地修改调用的函数,而不会改变调用所表示的语义。 指针一个复杂的主题,程序员会经常因为使用指针而造成内存管理错误

76910

开发者自述:为什么从C语言转投了D语言?

记得读过Scott Meyer著名的《Effective C ++》,这本书其实更多讲的是指出低效率的C ++编程的问题发现自己写的大多数C++代码都对上了号。...\n", 1 + 1); } 这个例子虽然浅显,但它体现出了C++和D之间背后理念的一些区别。 这篇关于C ++成员函数指针的文章也是对D的起源的一个很好的解释。...如果你酷爱编程,这篇文章是一个很好的解读, 但我的解读是:C++成员函数指针应该是感觉像是一个低级功能(就像普通函数指针一样),但其实现的复杂性和多样性说明它们真的“高级”。...这些指针的实现过程复杂,因为关于它们能做什么/不能做什么的规则是微妙的。作者解释了几个C ++编译器的实现,包括优雅而简单的Digital Mars C ++实现,即DMC。...一个常见的错误来源是未能正确匹配该代码,(尤其是涉及多个控制流路径时)。

1.4K20

Swift 中的热重载

跟踪的工作一个多月,对来说,每天节省了 1-2 小时。 坦白地说,如果每周节省10个小时的开发时间都不能说服您去尝试,那么认为任何方法都不能说服你。 其他平台在做什么?...当我为《纽约时报》写了一个拼字游戏时,很喜欢它。...微软最近推出了 Visual Studio 2022,并为 .NET 和 标准 C++ 应用程序提供热重载,在过去的十年中,微软开发工具和经验方面一直大杀四方,所以这并不令人惊讶。...Vanilla TCA 不允许这样做,因为 reducer 代码是一个免费功能,不能直接用注入替换,但我 The Browser Company 的分支 支持它。...如果您切换到我们的 TCA 分支(我们保持最新),你可以 UI 和 TCA 层上使用 Inject 。 它有多可靠? 没有什么是完美的,但我已经使用它十多年了。

1.9K20

守望先锋游戏总监谈后续计划 正在开发新英雄

个人预计竞技模式上线几个赛季之后我们才可以达到我们真正想要的那种效果。 除此之外,我们也开发新英雄。 其中有些已经开发很久了,有些才刚刚开始。我们也有一些英雄原型可能不会最终推出了。...其中一个公开宣布的地图,已经通过了测试,我们很有信心。 目前我们的艺术团队正在设计这张地图的具体表现形式。他们努力让他看上去赞。...我们要强调,这是一个多人游戏,是一个团队游戏。 目前也有很多技术上的工作再做,但我可能不是这方面问题的最合适的发言人。 比如说我们花费了很多工作开发高带宽下的多人自定义游戏。...另外我们也非常努力的去开发反作弊和反破解,但当然具体细节不能说的。 当然,除了上面介绍的东西,我们的工作中还有很多别的。 可能这里忘记了,也可能是我们故意不告诉你们让你们到时候能有惊喜。...但我还是要强调:说过的东西都不能保证最终就一定会发布。 开发人员一般很少讲开发上的事情的原因就是游戏开发中会经常出现反复的推倒重来,而玩家们则可能理解不了这一点。

66880

真正的杀死C++的不是 Rust

一切始于 2005 年末的一个三维空间模拟引擎。该引擎具备了当时 C++ 所有的特性,三星指针、八层依赖关系,以及无处不在的 C 风格的宏。...起初,认真地尝试理解每一处小细节,但在碰了一鼻子灰之后,放弃了。还是老老实实完成任务,改 bug 吧。不能说的工作效率很高,只能说勉强,不至于被解雇。...回来后发现他们用这个解释器编写了整个游戏场景,所以接下来的一段时间里我们必须支持这个解释器。 在过去的 17 年里,一直努力摆脱 C++,但每次尝试过新技术后,总是会回到 C++。...给他讲了CUDA、CMake、Linux 构建、测试以及优化等等,大约花了一个小时。他很有礼貌地听完了的介绍,最后说:“很有意思,但我想问一个非常具体的问题。...一个函数,函数的定义前面加了@cuda.jit,Python就无法编译内核了,还提示了一些关于数组的错误。你知道这里面有什么问题吗?” 不知道。后来,他花了一天时间自己搞清楚了。

8810

C++重要知识点小结---1

[cpp] view plaincopy >上有个好记的方法:const*号左边修饰的是指针所指的内容;const*号右边修饰的是指针。  ...简单记就是:左内容,右指针。   只要一听到被面试者说:"const意味着常数",就知道正在和一个业余者打交道。...尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题将问他一个附加的问题:下面的声明都是什么意思?...最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。...13.VC中,sizeof有着许多的用法,而且容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。

74091

发现VSCode有个bug,微软工程师凌晨这样回复...

陷入了沉思,不过马上灵机一动,「会不会小心改了C++环境配置文件出了问题」? 「这里有个知识点记下,要考」。...VSCode中有一个叫c_cpp_properties.json的配置文件,这个文件主要用于配置C/C++工程的基础信息,比如:「预定义宏、指定编译器路径、预定义头文件搜索路径等」。...环境问题? 发现这个问题确实有点诡异,走到这一步,「几乎可以断定是Linux开发环境出了问题,但是不确定是的机器环境问题还是 Linux下 VSCode 本身问题,那怎么办呢?...事已至此,看来真的要关掉远程开发,本地重新配置所有工程了,表面上还是劝自己再找找原因,没事,问题不大。 插件问题? 喝完水,坐下来继续想,「会不会是C++扩展出了问题呢?...关键是「可以看到这个版本的发布时间点刚好是发现bug的时间」,这回感觉离真相越来越近了,至少时间上是吻合的有底气了点,那有理由怀疑是这个插件出了问题,回退到上一个稳定版本0.29.0 ?

1K10

每日算法题:Day 15(CC++)

思路: 很多人都觉得这个问题一个排序问题但我觉得不一定要排序啊,可以使用堆结构(最小堆),首先将所有的元素都压入到最小堆中,每次弹出最小值就好了,一共弹出k个数。...文章链接: 从底层实现堆结构和堆排序 这里面将上面文章中的最大堆改成了最小堆,右一个细节就是:heapify中有一个left+1的边界,如果不满足这个边界,那么必须返回left,而不是left+1。...left + : left; // 这个判断错误时只能是left,由于left+1可能出了索引范围 mini = list[mini] < list[...【C/C++】多态原理解析 当父类中有了虚函数后,内部结构就发生了变化 内部多了一个vfptr(虚函数表指针),并指向vftable(虚函数表) 如果父类中有vfptr,那么子类继承的话会继承vfptr...,vftable,创建对象,即构造函数中会将虚函数表指针vfptr指向自己的虚函数表vftable,此时,如果函数发生了重写,那么多态时会对原来虚函数表中的函数进行替换,然后就造成了同样一个函数当传入父类和子类时

85220
领券