C++避免将NULL比较为0

Jas*_*Liu 1 c++

因为在C++中,NULL是必不可少的.每次我有一个未初始化的变量设置为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++];
}
Run Code Online (Sandbox Code Playgroud)

所以这里它将立即进入if语句,但我想等到b的最后一个元素被分配给0

Ric*_*ges 7

我想你要找的是boost::optional.

#include <boost/optional.hpp>
Run Code Online (Sandbox Code Playgroud)

...

boost::optional<int> maybe_int;
Run Code Online (Sandbox Code Playgroud)

...

if (maybe_int) // test if it has been assigned to
{
    if (maybe_int.value() == 0) // has is been set to zero?
    {
        // ...
    }
}    
Run Code Online (Sandbox Code Playgroud)