允许变量未初始化有什么好处?

ozm*_*zmo 8 c++ memory mapping variables initialization

在许多语言中,您可以声明变量并在初始化之前使用它.

例如,在C++中,您可以编写一个代码段,例如:

int x;
cout << x;
Run Code Online (Sandbox Code Playgroud)

这当然会返回不可预测的(好吧,除非你知道你的程序如何映射出内存)结果,但我的问题是,为什么编译器允许这种行为?

允许使用未初始化的内存会导致某些应用程序或效率吗?

编辑:我想到,将初始化留给用户会最大限度地减少对寿命有限(写周期)的内存介质的写入.只是上述"绩效"标题下的一个具体例子.谢谢.

pax*_*blo 13

我的想法(以前我错了,只问我的妻子)是因为它只是早期语言化身的延续.

C的早期版本不允许你在函数中的任何地方声明变量,它们必须位于顶部(或者可能在块的开头,因为我很少这样做,所以很难记住我的头脑如今).

此外,只有当您知道它应该是什么时,您才有可能理解设置变量的愿望.如果你要做的下一件事就是覆盖那个值(这就是人们来自这里的表现),那么将变量初始化为某些东西是没有意义的.

这就是为什么有必要允许未初始化的变量,尽管在初始化它们之前仍然不应该使用它们,并且好的编译器有警告让你知道它.

在C++(以及后来的C版本)中,您可以在函数中的任何位置创建变量,您应该创建它并同时初始化它.但这在早期是不可能的.你必须使用类似的东西:

int fn(void) {
    int x, y;
    /* Do some stuff to set y */
    x = y + 2;
    /* Do some more stuff */
}
Run Code Online (Sandbox Code Playgroud)

如今,我选择:

int fn(void) {
    int y;
    /* Do some stuff to set y */
    int x = y + 2;
    /* Do some more stuff */
}
Run Code Online (Sandbox Code Playgroud)


jqa*_*jqa 5

编程中最古老的借口:它提高了性能!

编辑:阅读您的评论,我同意 - 几年前,性能的重点是 CPU 周期数。我的第一个 C 编译器是传统的 C(在 ANSI C 之前的那个),它允许编译各种令人厌恶的东西。在现代,绩效与客户投诉的数量有关。当我告诉我们招聘的新毕业生时 - “我不在乎程序给出错误答案的速度有多快”。使用现代编译器和开发的所有工具,少写错误,每个人都可以按时回家。

  • 甚至不声明它不会更能提高性能吗?这样,甚至不需要为变量分配内存。任何引用此类代码性能的人都是完全错误的。 (2认同)
  • C++ 程序不仅适用于功能强大的桌面。它们也用于小型微控制器(C 是),编写微控制器的人不想放弃额外的指令(不仅是时间,而且是空间),为什么要这样做;他们知道使用未初始化内存的相关问题,所以他们为什么要在不需要的时候支付(初始化)成本。我们是否想对每个人强制执行成本,以便保护一些没有经验的程序员?我会说它们已经受到保护;现代编译器总是会警告你这个问题。 (2认同)

dre*_*lax 1

也许在某些情况下,在需要之前保留内存未初始化会更快(例如,如果在使用变量之前从函数返回)。无论如何,我通常都会初始化所有内容,我怀疑这会对性能产生任何真正的影响。我确信编译器将有自己的方式来优化无用的初始化。