![]() |
Home | Libraries | People | FAQ | More |
We could write function convert
in a slightly different manner, so that it has a single return-statement:
boost::optional<int> convert(const std::string& text) { boost::optional<int> ans; std::stringstream s(text); int i; if ((s >> i) && s.get() == std::char_traits<char>::eof()) ans = i; return ans; }
The default constructor of optional
creates an uninitialized optional object. Unlike with ints
you cannot have an optional<int>
in an indeterminate state. Its state is always well defined. Instruction
ans =
i initializes the optional object.
It uses the 'mixed' assignment from int.
In general, for optional<T>,
when an assignment from T
is invoked, it can do two things. If the optional object is not initialized
(our case here), it initializes the contained value using T's
copy constructor. If the optional object is already initialized, it assigns
the new value to it using T's
copy assignment.