我正在对初级(也许是高级)软件工程师所犯的常见错误和错误假设进行一些研究。

你坚持时间最长、最终被纠正的假设是什么?

例如,我误解了整数的大小不是标准的,而是取决于语言和目标。说起来有点尴尬,但事实就是这样。

坦率地说;你有什么坚定的信念?你大概坚持了多长时间?它可以是关于一种算法、一种语言、一个编程概念、测试,或者任何关于编程、编程语言或计算机科学的东西。


当前回答

在c++中,很长一段时间我都在想编译器在给纯虚方法定义时拒绝你。

当我意识到我错了时,我很吃惊。

很多次,当我告诉别人为其抽象类提供其纯虚析构函数的默认实现时,他/她都用大大的眼睛看着我。我知道接下来会有一场长时间的讨论……这似乎在c++初学者中是一个普遍的信念(我认为我自己也是如此)。我目前还在学习!)

Wikipedia链接到c++的纯虚拟方法

其他回答

在编程的头几年,我没有意识到1kbyte在技术上是1024字节,而不是1000字节。我总是有点困惑,因为我的数据文件的大小似乎与我预期的稍有出入。

没开始做的事,永远做不完。

看起来真的很愚蠢,但我推迟了这么多项目,因为规模太大了。我刚刚完成了一个巨大的项目,我意识到如果我意识到它的范围,我就不会开始了。在现实中,即使是最复杂的系统,当被分解成离散的和明确的部分时,也是相当简单的。然而,从宏观层面来看,它很快就被压倒了。

在学校里,你被教导编程是“读取输入,处理数据,写输出”。实际上,很少有处理步骤——大多数编码只是“读取输入,输出”。

一般来说,它要么是“从用户读取,写入数据库”,要么是“从数据库读取,显示在屏幕上”。这两种情况涵盖了大约95%的工作。

编程是给后辈的,最好的项目经理是不会编程的人。

在我刚开始学习c++的时候(很多时候),我周围都是Java学者。当被问及c++相对于Java的优势时(我通常会认为这是一个做作的问题,但就是这样),我会在我的回答中包括c++提供了引用和指针。Java的家伙会看起来难以置信,并建议引用是指针,并把我笑出了房间。我坚持在c++中引用和指针是不同的。

说句公道话,我是对的。引用和指针在语义和语法上是不同的。不幸的是,我用一个谬论来支持我的说法:底层实现是不同的。

我坚信,通过标准化,引用是语法中的名称别名,就像typedef是没有存储空间的类型别名一样。

我确信引用不是对象,也没有存储空间,它们只是提供了从“名称”到“对象”的多个顶级映射。在这方面,我认为它们就像文件系统中的软链接:

Code: int a = 3; int& b = a;

 Names          Objects           Memory

+-----+     +-------------+     +-------+
|  a  |---->|             |     |       |
+-----+     |             |     |       |
            |     int     |---->|   3   |
+-----+     |             |     |       |
|  b  |---->|             |     |       |
+-----+     +-------------+     +-------+

当然,尽管优化可能会导致这种情况,但引用确实有存储空间。它们是不同的对象,即使语法尽力将其从程序员那里抽象出来。

可以这么说,我很失望地了解到,关闭优化的编译器可能会将引用作为指针实现,需要一个解引用操作:我实际上是在文件系统中创建一个硬链接的类比:

Code: int a = 3; int& b = a;

 Names          Objects           Memory

+-----+     +-------------+     +-------+
|  a  |---->|     int     |---->|       |
+-----+     +-------------+     |       |
                                |   3   |
+-----+     +-------------+     |       |
|  b  |---->|     int&    |---->|       |
+-----+     +-------------+     +-------+

标准c++实际上并没有指定引用应该如何实现,所以我的理论可能适用于一些工具链,但在任何主流编译器中都不适用……当然标准中也没有说明。