【发布时间】:2017-01-16 21:34:27
【问题描述】:
由于在 C++ 中,NULL 是必不可少的 0。每次我将未初始化的变量设置为 NULL 时,我想通过将其与 NULL 进行比较来检查该变量是否已初始化。但是,如果变量恰好在某处被赋值为 0,那么我无法判断它是否已被初始化。我肯定可以做一些工作来避免使用另一个包装对象来包装变量或使用标志的情况。但我正在寻找更优雅的解决方案。例如:
int b[4] = {1,2,3,0};
int a = NULL;
int i = 0;
while(true){
if(a == 0)return;
a = b[i++];
}
所以这里它会立即进入 if 语句,但我想等待 直到a被b的最后一个元素赋值为0
【问题讨论】:
-
你不能比较未初始化的变量,因为它们可能有所谓的陷阱值。
-
“由于在 C++ 中,NULL 是必不可少的,只是 0” 也许,也许不是。它扩展为一些“nullpointer-constant”,所以
#define NULL nullptr也是合法的。特别是,int a = NULL;可能编译也可能不编译。 -
可能的骗子:stackoverflow.com/questions/1226489/…stackoverflow.com/questions/6822044/…(很遗憾,我的选票没了。)
-
int a = NULL;可能会被接受,但这是不合适的。NULL是一个扩展为空指针常量的宏,它很可能是整数常量0,但它旨在用于需要指针值的上下文中。由于int不是指针类型,所以int a = 0;完全等效且更清晰。0可以用作空指针常量这一事实几乎是历史的偶然。而NULL宏不一定定义为0;它可以定义为nullptr或其他,not 等同于0。 -
“寻找更优雅的解决方案。” 您如何保证通过更好的启动设计来初始化变量?我发现“检查初始化”只是一个可怕的陷阱,会导致不必要的错误检查和分支生成。
标签: c++