I want to do an if like:
if(x has not been initialized)
{...
}
Is this possible? Thanks
I want to do an if like:
if(x has not been initialized)
{...
}
Is this possible? Thanks
要实现该行为,您可以使用指针,默认启动为 0。
例如:
int *number = 0;
// ...
if (!number) {
// do something
}
您可以对任何类型使用该技巧,而不仅仅是整数:
Cat *kitty = 0;
// ...
if (!kitty) {
// do something
}
nullptr
来表示“未初始化”。boost::optional<T>
(或者std::optional<T>
当它可用时)。bool initialized;
”标志将不得不做。optional<T>
基本上只是封装了这个标志。a) For primitive datatypes such as int, float its not possible to know if its initialized or not.
b) For pointers you can check if its not nullptr or not
if(ptr != nullptr)
{
}
c) For custom class you need to introduce bool member which can be set to true in constructor so that we can use it to check if object is initialized or not.
if(obj.isInitialized())
{
}
使用 C++-11,您可以考虑使用智能指针存储变量。将yor 变量x
(假设 x 为int
)声明为
std::shared_ptr<int> x;
分配变量x
时,请使用
x = std::make_shared<int>(newValueOfX);
然后您可以x
通过检查确定是否曾经分配过
if (this->x) { ... }
有关更详细的示例,请参阅检查变量是否已初始化。
那么类似的东西适用于指针。说:
int* x = NULL; //initialize
if(x == NULL)
{
//dostuff
}
或者干脆
if(!x)
{
//dostuff
}
不确定是否有办法只使用常规 int
编辑:现在我想起来了,Luthian 是对的。那将是未定义的行为。正如其他人所说,您必须初始化为某个已知值。