将变量初始化为空

时间:2016-10-24 17:10:19

标签: c++ initialization

如果我有unsigned int,但我想知道它是否为空,但我需要0,我总是将其声明为int并将其设置为-1 }。但是,当我需要全频谱或我甚至使用float / double时,我该怎么办?

对于某些数据类型,它很简单,例如std::string,您可以将其与""进行比较,但是有一个函数来检查变量是否为空而不管数据类型,甚至自定义类对象?

1 个答案:

答案 0 :(得分:2)

缺少值的语义正是将std::optional引入C ++语言规范的原因。

std::optional<unsigned int> value; // by default, the value is missing
if(value) {
    // executed if the value is present, it is not
} else {
    // this code is executed
}
value = 1;
if(value) {
    // This code would now be executed
    std::cout << "the value: " << *value << std::endl;
}

这需要改变对变量含义的思考,但它会强迫你随时思考变量是否存在。

例如,如果您有自己的类类型MyClass并且想要保留一个可能缺少的类实例,那么您将按如下方式执行:

std::optional<MyClass> obj; // Initially missing
obj = MyClass();            // Assigns a newly-created instance of MyClass
obj->foo();                 // Calls the 'MyClass::foo' method
obj.reset();                // clears the 'obj' optional