【发布时间】:2016-04-26 10:56:18
【问题描述】:
例如,声明一个引用而不将其分配给某个东西会产生编译器错误,例如。 int &refVar; 但这不适用于指针。我知道 C++ 跳过了一些正常的默认功能,例如跳过边界检查等以提高速度,但这个理论并不适合指针变量。
为什么有人会声明一个指针变量而不是初始化它?为什么不NULL/0 甚至nullptr?大多数静态分析器实际上都指出了这个问题,但是定义这种未定义行为的可能原因是什么?这不是错误的重要来源吗?
【问题讨论】:
-
公平地说,零初始化指针确实对性能有影响,尽管很小。
-
@VioletGiraffe ideone.com/DCptGZ
-
@oopaewem 那是默认初始化(这是语言中定义明确的术语)。您的问题是“为什么默认初始化在某些情况下不进行初始化”。
-
回到 45 年前运行在 1MHz 左右的 K&R PDP11,然后回到 30 年前运行 C++。 PC 以 4.77MHz 运行。 C 和 C++ 被设计为可移植的汇编程序,因此速度为王。我也有很多次使用指针,因为我不知道我希望它引用到哪里。将其初始化为任何东西都是没有意义的,例如我将使用工厂方法来决定我想要它是什么。在那些日子里,初始化也可能会产生一个 malloc 和默认构造函数,编译器不是现在的样子。