如果我有unsigned int
,但我想知道它是否为空,但我需要0,我总是将其声明为int
并将其设置为-1
}。但是,当我需要全频谱或我甚至使用float
/ double
时,我该怎么办?
对于某些数据类型,它很简单,例如std::string
,您可以将其与""
进行比较,但是有一个函数来检查变量是否为空而不管数据类型,甚至自定义类对象?
答案 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