我想做一个if if:
if(x has not been initialized)
{...
}
这可能吗?感谢
答案 0 :(得分:4)
答案 1 :(得分:3)
要实现该行为,您可以使用指针,默认启动为0。
例如:
int *number = 0;
// ...
if (!number) {
// do something
}
您可以将该技巧用于任何类型,而不仅仅是整数:
Cat *kitty = 0;
// ...
if (!kitty) {
// do something
}
答案 2 :(得分:1)
a)对于诸如int之类的原始数据类型,浮点数不可能知道它是否已初始化。
b)对于指针,您可以检查它是否不是nullptr
if(ptr != nullptr)
{
}
c)对于自定义类,您需要引入bool成员,该成员可以在构造函数中设置为true,以便我们可以使用它来检查对象是否已初始化。
if(obj.isInitialized())
{
}
答案 3 :(得分:1)
nullptr
来表示“未初始化。”boost::optional<T>
(或std::optional<T>
当它可用时。)bool initialized;
”标志必须要做。 optional<T>
基本上只是封装了这个标志。答案 4 :(得分:0)
使用C ++ - 11,您可以考虑使用智能指针存储变量。将变量x
(假设x为int
)声明为
std::shared_ptr<int> x;
分配变量x
时,请使用
x = std::make_shared<int>(newValueOfX);
然后您可以通过检查
来确定是否曾分配过x
if (this->x) { ... }
有关更详细的示例,请参阅Checking if a variable is initialized。
答案 5 :(得分:-1)
这样的东西适用于指针。说:
int* x = NULL; //initialize
if(x == NULL)
{
//dostuff
}
或只是
if(!x)
{
//dostuff
}
不确定是否只有常规int的方法
编辑:现在我想起来了,Luthian是对的。这将是未定义的行为。正如其他人所说,你必须初始化为某个已知值。