为了账号安全,请及时绑定邮箱和手机立即绑定

为什么默认情况下没有使用NULL初始化指针?

为什么默认情况下没有使用NULL初始化指针?

C++
慕虎7371278 2019-08-12 10:28:14
为什么默认情况下没有使用NULL初始化指针?有人可以解释为什么指针没有初始化NULL?例:  void test(){      char *buf;      if (!buf)         // whatever   }程序不会进入if,因为buf它不是null。我想知道为什么,在什么情况下我们需要一个带垃圾的变量,特别是指针解决内存上的垃圾?
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

我们都意识到应该初始化指针(和其他POD类型)。
那么问题就变成了“谁应该初始化它们”。

那么基本上有两种方法:

  • 编译器初始化它们。

  • 开发人员初始化它们。

我们假设编译器初始化了未由开发人员显式初始化的任何变量。然后我们遇到这样的情况:初始化变量是非常重要的,开发人员在声明点没有这样做的原因是他/她需要执行一些操作然后分配。

所以现在我们遇到这样的情况:编译器已经向代码添加了一条额外的指令,该指令将变量初始化为NULL,然后添加开发人员代码以进行正确的初始化。或者在其他条件下,变量可能永远不会被使用。很多C ++开发人员会在这两个条件下以这个额外指令为代价来尖叫犯规。

这不仅仅是时间问题。还有空间。在很多环境中,两种资源都非常宝贵,开发人员也不想放弃。

但是:您可以模拟强制初始化的效果。大多数编译器会警告您未初始化的变量。所以我总是将警告级别变为可能的最高级别。然后告诉编译器将所有警告视为错误。在这些条件下,大多数编译器将为未初始化但使用的变量生成错误,从而阻止生成代码。


查看完整回答
反对 回复 2019-08-12
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

引用TC ++ PL中的Bjarne Stroustrup(特别版第22页):

功能的实现不应对不需要它的程序施加大量开销。


查看完整回答
反对 回复 2019-08-12
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

因为初始化需要时间。在C ++中,你应该对任何变量做的第一件事是明确地初始化它:

int * p = & some_int;

要么:

int * p = 0;

要么:

class A {
   public:
     A() : p( 0 ) {}  // initialise via constructor
   private:
     int * p;};


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 819 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信