为什么默认情况下没有使用NULL初始化指针?有人可以解释为什么指针没有初始化NULL?例: void test(){
char *buf;
if (!buf)
// whatever
}程序不会进入if,因为buf它不是null。我想知道为什么,在什么情况下我们需要一个带垃圾的变量,特别是指针解决内存上的垃圾?
3 回答
临摹微笑
TA贡献1982条经验 获得超2个赞
我们都意识到应该初始化指针(和其他POD类型)。
那么问题就变成了“谁应该初始化它们”。
那么基本上有两种方法:
编译器初始化它们。
开发人员初始化它们。
我们假设编译器初始化了未由开发人员显式初始化的任何变量。然后我们遇到这样的情况:初始化变量是非常重要的,开发人员在声明点没有这样做的原因是他/她需要执行一些操作然后分配。
所以现在我们遇到这样的情况:编译器已经向代码添加了一条额外的指令,该指令将变量初始化为NULL,然后添加开发人员代码以进行正确的初始化。或者在其他条件下,变量可能永远不会被使用。很多C ++开发人员会在这两个条件下以这个额外指令为代价来尖叫犯规。
这不仅仅是时间问题。还有空间。在很多环境中,两种资源都非常宝贵,开发人员也不想放弃。
但是:您可以模拟强制初始化的效果。大多数编译器会警告您未初始化的变量。所以我总是将警告级别变为可能的最高级别。然后告诉编译器将所有警告视为错误。在这些条件下,大多数编译器将为未初始化但使用的变量生成错误,从而阻止生成代码。
30秒到达战场
TA贡献1828条经验 获得超6个赞
因为初始化需要时间。在C ++中,你应该对任何变量做的第一件事是明确地初始化它:
int * p = & some_int;
要么:
int * p = 0;
要么:
class A { public: A() : p( 0 ) {} // initialise via constructor private: int * p;};
- 3 回答
- 0 关注
- 819 浏览
添加回答
举报
0/150
提交
取消