为什么默认情况下不使用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

    上一篇: Why aren't pointers initialized with NULL by default?

    下一篇: Two UITableView, one master view and one details view