Optional definition (std::optional
) manages an optional contained value, i.e. a value that may or may not be present. This class template comes with C++17 standard, it is used with CLANG and other C++ compilers which has this standard. A common use case for optional
is the return value of a function that may fail. Any instance of optional<T>
at any given point in time either contains a value or does not contain a value. If an optional<T>
contains a value, the value is guaranteed to be allocated as part of the optional
object footprint, i.e. no dynamic memory allocation ever takes place. Thus, an optional
object models an object, not a pointer, even though operator*() and operator->() are defined.
C++ Builder supports C++17 standards with its CLANG compiler and Bcc Compiler. Optional can be used to define any type of variables as below;
1 2 3 4 |
std::optional<int> a(5); std::optional<int> b; |
An optional variable can be checked by has_value() method if it has a value or not.
1 2 3 |
if (a.has_value()) { } |
Value optional variable can be obtained by value() property and or value_or(0) method that returns 0 if no value. This C++ Builder VCL Windows application example below explains all;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <vcl.h> #include <windows.h> #include <optional> #pragma hdrstop #pragma argsused #include <tchar.h> #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { std::optional<int> a(5); std::optional<int> b; if (a.has_value()) { int z = a.value() + b.value_or(0); // *deref, or .value() std::cout << z; } getchar(); return 0; } |