4

I want to do an if like:

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

Is this possible? Thanks

4

6 回答 6

4

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

亚历山大·盖斯勒

这里

于 2013-06-07T18:49:12.343 回答
3

要实现该行为,您可以使用指针,默认启动为 0。

例如:

int *number = 0;
// ...
if (!number) {
    // do something
}

您可以对任何类型使用该技巧,而不仅仅是整数:

Cat *kitty = 0;
// ...
if (!kitty) {
    // do something
}
于 2013-06-07T18:49:25.250 回答
1
  • 如果你有一个指针,你可以用它nullptr来表示“未初始化”。
  • 如果你有一个非指针,你可以使用boost::optional<T>(或者std::optional<T>当它可用时)。
  • 否则,天真的“ bool initialized;”标志将不得不做。optional<T>基本上只是封装了这个标志。
于 2013-06-07T19:10:19.897 回答
1

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())
{
}
于 2013-06-07T19:03:21.737 回答
0

使用 C++-11,您可以考虑使用智能指针存储变量。将yor 变量x(假设 x 为int)声明为

std::shared_ptr<int> x;

分配变量x时,请使用

x = std::make_shared<int>(newValueOfX);

然后您可以x通过检查确定是否曾经分配过

if (this->x) { ... }

有关更详细的示例,请参阅检查变量是否已初始化。

于 2017-01-27T11:56:05.967 回答
-1

那么类似的东西适用于指针。说:

int* x = NULL;  //initialize
if(x == NULL)
{
    //dostuff
}

或者干脆

if(!x)
{
    //dostuff
}

不确定是否有办法只使用常规 int

编辑:现在我想起来了,Luthian 是对的。那将是未定义的行为。正如其他人所说,您必须初始化为某个已知值。

于 2013-06-07T18:51:35.383 回答