當我有一個unsigned int
,但我想知道它是否爲空,但我需要0時,我總是將它聲明爲int
並將其設置爲-1
。但是,當我需要全譜圖譜或者我甚至使用float
/double
時,我該怎麼做?將變量初始化爲空
對於某些數據類型很簡單,例如std::string
,你可以只是比較""
,但有檢查,如果不考慮數據類型的變量,甚至是自定義的類對象爲空,函數?
當我有一個unsigned int
,但我想知道它是否爲空,但我需要0時,我總是將它聲明爲int
並將其設置爲-1
。但是,當我需要全譜圖譜或者我甚至使用float
/double
時,我該怎麼做?將變量初始化爲空
對於某些數據類型很簡單,例如std::string
,你可以只是比較""
,但有檢查,如果不考慮數據類型的變量,甚至是自定義的類對象爲空,函數?
缺失值的語義正是爲什麼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
如何重新設置變量? – kim366
您可以在實例上調用['optional :: reset'](http://en.cppreference.com/w/cpp/utility/optional/reset)方法。 –
@Kim - 您可以通過調用['value.reset()'](http://en.cppreference.com/w/cpp/utility/optional)來重置'value'。 :-) –
還有就是「沒有統一的概念空虛」。 **你需要定義你想要使用的詞彙。 –
那麼'floats'常見的是什麼? – kim366
查看'可選'(在boost或std中,如果你可以使用C++ 17) – krzaq