c++从精通到入门

本文通过一则面试故事揭示了C++语言的复杂性和深度,强调了即使对于C++98和C++03版本,精通也并非易事。随着C++标准的演进,模板元编程、编译器特性和标准解析的挑战日益增加,程序员需要不断学习和实践才能真正掌握这门语言。面试中的难题涉及模板元编程、编译器错误修复、标准解析等多个方面,表明C++的学习和应用远超表面知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

首先解释下为什么会有这个标题。

c++这门语言,在20世纪80年代由Bjarne Stroustrup在贝尔实验室发明。到2020年c++20版本的发布,中间经历了五个c++标准,分别是c++98、c++03、c++11、c++14、c++17。

然而大部分人对c++的了解,还停留在c++98或者c++03上。然而就对于这两个版本而言,想要说的上精通谈何容易?更不必说后面的三个标准。

网上有这么一个段子:

面试官:“9 号,xxx,在吗?”

我:“在在在!!”

面试官:“来,跟我走”。

到了面试的屋子。面试官微笑让我坐下。

面试官:“哦,xxx。看你的简历上,写的是……唔……精通 C++?”

我:是的

我心想,这 HR 还不好糊弄吗?

面试官:“哦,桌子上有笔和纸,先写一个模板元编程实现的编译期堆排序吧。嗯……五分钟够了吧?我开始计时了哦。”

WTF??? 我的心咯噔一下,顿时乱了手脚,却也只能装模做样地在纸上写什么 template、typename ……

面试官:到时间了,我看看。嗯……看起来你不是太懂模板呀。问一道简单一点的吧。”

卧槽,终于。。。简单的来了!!!我的心里又有了一丝希望。

面试官:“你看我这有一段程序”,她把她的 MacBook 转到我这边来,“能看清吧?但是这段程序在我这台电脑上的 Clang 3.7 编译会 ICE。你能帮忙修一下 Clang 的 bug 吗?十分钟可以吗?”

我:“这个……不太熟 Clang……” 

面试官:“那你对哪个 C++ 编译器熟悉呢?”
我:“MSVC!”

我想都没想就脱口而出,但是听到下面的话我想咬舌自尽。。。。。

面试官:“哦,MSVC 啊,我开一下虚拟机……嗯……,好了。来看看,这段程序会导致 MSVC ICE,你看看 MSVC 哪里有 bug?哦对了,MSVC 不开源,简单逆向一下就好啦……”

我:“这个……不太会。”

面试官:“这个也不会?”

HR 显得很失望,感觉脸都变了。。。。。我开始瑟瑟发抖

面试官:“那看看这个程序吧,在 GCC 6.2 和 Clang 3.7 跑出来的结果不一样,

1. 你说是标准 wording 的失误,还是编译器实现的问题,还是其它的可能性呢?

2. 如果是 wording 失误,或者是 unspecified/UB/impl defined,请指出标准哪节说的,

3. 如果是编译器的错误,请说说哪个编译器实现错了,错在编译器源码的哪里?

嗯……改就算了,看你也不太会改编译器……哦对了,标准草案的 PDF 应该不需要吧?这种东西应该背差不多了吧?

听着这连珠炮弹式的发问,只能是从懵逼到更懵逼。。。。。

以上只是c++的一隅。当你号称自己精通c++的时候,那对于上面的问题,是否能全部回答出来?所以说,没有十几年、甚至几十年如一日的使用、学习c++,谈不上精通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双鱼理

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值