变量未初始化为条件c ++

时间:2013-06-07 18:44:37

标签: c++ if-statement

我想做一个if if:

if(x has not been initialized)
{...
}

这可能吗?感谢

6 个答案:

答案 0 :(得分:4)

“无法检查变量的内容是否未定义。您可以做的最好的事情是分配信号/ sentinel值(例如在构造函数中)以指示进一步初始化需要进行。“

Alexander Gessler

来自here

答案 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是对的。这将是未定义的行为。正如其他人所说,你必须初始化为某个已知值。