在一次采访中,有人问我是否知道C和C ++之间的区别。
我想知道为什么会问这样的问题?
在一次采访中,有人问我是否知道C和C ++之间的区别。
我想知道为什么会问这样的问题?
Answers:
有人观察到,有大量的编程工作申请者根本不会编写代码。因此,是的,提出“显而易见的”问题是很合理的。
有一大堆。有无数的人拥有愚蠢的讲师,他们教C字符串和new
和delete
,或者是过时的教程或坏书,虽然他们学习“ C ++”但实际上是C,但他们认为两者非常接近。
当然,如果您是雇主,那么说他们相同甚至相似是一个很大的警告信号。
还有一小部分人(例如我自己)在学习C之前就已经学习过C ++。
我敢肯定,您知道它们之间的区别,但是如果您是仅拥有C ++类而不是C类的学生,那么与C不兼容的C ++部分将不会很明显。
我了解到的一些更明显的差异(不是详尽的列表)()struct数据类型本来不能包含函数,也不能具有私有成员,这意味着很难强制实施抽象数据类型的有效性规则C中不支持类()C()中不支持类,使用&运算符通过引用传递的引用特定于C ++()C不支持流或模板(*)malloc和free仅用于C中,而不能用于C ++
不幸的是,我认为它变得越来越普遍。
我认为刚从技术学校毕业(或从那里学习技能的年轻人)根本不会学习诸如C,C ++,Lisp,OCaml等较老的语言。他们只是以“ c#程序员”或“ java程序员”的身份出现”等。找到工作后,他们不会挑战自己学习其他语言。
当然有一些可以做到的,但是从我曾经合作过的人来看,年轻的程序员普遍遵循这种模式。
免责声明:既然我在谈论教育,那么在教育方面所强调的问题当然在各个国家之间可能会有所不同。
可能不是从字面上看,因为他们认为C ++和C是一模一样的,但是就真正理解和能够使用C ++的不同功能而言,是的。
主要原因是简历/简历中列出语言/工具的二进制性质。本质上,标准似乎是,如果让“ Hello World”编译并以某种语言运行,则可以在简历/简历中列出它。
碰巧,C版本的“ Hello,World!” 还可以在C ++中编译和运行。因此,在没有任何其他信息的情况下,在履历上看到“ C ++”的所有信息都告诉我,这个人知道足够的C来获取“ Hello,World!”。运行,并且知道大多数C程序都将使用C ++进行编译。
鉴于此,我将需要在访谈中对此进行一些探讨。我可能不会通过问“是/不是”“您知道区别吗?”来这样做。问题,总之是因为它具有明显的“正确”答案。我可能会问应聘者,她更喜欢哪种语言,为什么,以及她没有选择的语言是否有优势。
回答
是的,这很普遍。我,我自己,同事或第三方库代码都已经见过这种情况。
例如,我本人有时会与其他编程语言或编程框架一起使用,并且必须链接或更新到“纯c”或“ c ++”库。
我只是有修改一些“纯C”代码的问题。并使用“ c ++”的“新”和“删除”内存分配功能。其余代码不是面向对象的
编译器是C ++。后来,我起诉了另一个编译器,并发现了错误。
奖金
如果有人通过口头或书面测试或在线在线测试提问:
“您知道C或C ++之间的区别”
然后您回答“是”或“否”。
他们的真正意思是:
“您知道C或C ++之间的区别吗,请告诉我?”
因此,您必须回答:
“是的。尽管如此,您可以在C ++程序内部使用Pure C来实现向后兼容性,这与C ++和面向对象的不同。”
有时,他们不会问您“如果您愿意,请告诉我”,他们会假设您不知道。不要只是回答“是”或“否”。
编辑
首先,请注意,此答案并不意味着声明没有区别,或者我自称知道这些区别,甚至不是C或C ++中的“ Hello World”。这是对问题的答案,它规定了职权范围,指出很多人都知道基本差异(例如,一个+
人的名字有一些特点),很少有人会知道所有或什至大多数差异。
这取决于您所说的“程序员”和“差异”。
我是一个“程序员”(尽管我称自己为开发人员),我将努力给出C和C ++之间的真正区别。如果按一下,我可能会说C ++是C的超集,它具有名称空间和继承。处理内存的不同方式。我知道足以修补一些bug或对现有程序进行一些更改,但是我无法想象除了用C或C ++编写一个简单的实用程序外,还要写些什么。我足够了解,但是我不会把自己描绘成“知道”这两种语言。
我知道其他“程序员”(也是开发人员)甚至不会告诉您Java与FORTRAN或Javascript与Pascal之间的区别。他们擅长于做程序语言,而不擅长程序语言。
然后有数百万的普通程序员几乎不了解他们每天使用的单一语言。
术语“差异”是模棱两可的。我已经指出了上面我看到的一些差异,但是我知道它们不是确定的和完整的。很少有人会知道每一个区别-将会有更多的人能够对对象定向给出一些模糊的答案(就像我一样)。
程序员不知道C和C ++之间的区别是否很常见?
二十年前?是。
今天?没那么多。
这样做的原因是因为编程领域发生了很大的变化。当今的许多程序都是基于Web的。即使是为台式机编写的程序,也可能使用比C或C ++更高级的语言编写。因此,除非您是编写OS代码的程序员,否则您可能对这两种语言都不了解太多。
面试官可能会在面试中问这个问题,以评估您对编程基础知识的了解程度。如果您了解C和C ++之间的区别,那么您可能会知道什么是面向对象的编程,您可能会了解库和编译器,您会了解内存函数,引用,指针.....许多因素影响了当今的编程语言。我使用C ++的程度不高(我不能说我是任何语言的优秀程序员;智慧会随着时间而来),但是我可以说我在C ++方面的经验肯定使我成为一名更好的程序员。