2016-10-24 83 views
0

當我有一個unsigned int,但我想知道它是否爲空,但我需要0時,我總是將它聲明爲int並將其設置爲-1。但是,當我需要全譜圖譜或者我甚至使用float/double時,我該怎麼做?將變量初始化爲空

對於某些數據類型很簡單,例如std::string,你可以只是比較"",但有檢查,如果不考慮數據類型的變量,甚至是自定義的類對象爲空,函數?

+3

還有就是「沒有統一的概念空虛」。 **你需要定義你想要使用的詞彙。 –

+0

那麼'floats'常見的是什麼? – kim366

+0

查看'可選'(在boost或std中,如果你可以使用C++ 17) – krzaq

回答

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 
+0

如何重新設置變量? – kim366

+0

您可以在實例上調用['optional :: reset'](http://en.cppreference.com/w/cpp/utility/optional/reset)方法。 –

+1

@Kim - 您可以通過調用['value.reset()'](http://en.cppreference.com/w/cpp/utility/optional)來重置'value'。 :-) –