为什么默认情况下不使用NULL初始化指针?
有人可以解释为什么指针没有初始化为NULL
?
例:
void test(){
char *buf;
if (!buf)
// whatever
}
如果因为buf
不为null,程序将不会进入if。
我想知道为什么,在什么情况下我们需要一个带有垃圾的变量,特别是指向内存垃圾的指针?
我们都知道指针(和其他POD类型)应该被初始化。
那么问题就变成了“谁应该初始化它们”。
那么基本上有两种方法:
让我们假设编译器初始化任何未由开发人员明确初始化的变量。 然后我们遇到这样的情况,初始化变量不是微不足道的,开发人员没有在声明点上做的原因是他/她需要执行一些操作,然后进行赋值。
所以现在我们遇到这样的情况:编译器向代码添加了一个额外的指令,将该变量初始化为NULL,然后添加开发者代码以执行正确的初始化。 或者在其他条件下,该变量可能从未被使用过。 许多C ++开发人员都会在这两种情况下都以这个额外指令为代价来尖叫。
这不仅仅是时间。 但也有空间。 有很多环境,其中两种资源都非常重要,开发人员也不想放弃。
但是 :你可以模拟强制初始化的效果。 大多数编译器会警告你关于未初始化的变量。 所以我总是把我的警告水平提高到最高水平。 然后告诉编译器将所有警告视为错误。 在这些情况下,大多数编译器会为未初始化但使用的变量生成一个错误,从而阻止生成代码。
在TC ++ PL中引用Bjarne Stroustrup(特别版第22页):
功能的实现不应该对不需要它的程序施加大量的开销。
因为初始化需要时间。 在C ++中,你应该对任何变量做的第一件事是明确地初始化它:
int * p = & some_int;
要么:
int * p = 0;
要么:
class A {
public:
A() : p( 0 ) {} // initialise via constructor
private:
int * p;
};
链接地址: http://www.djcxy.com/p/84425.html