|  | 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 unitialized 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.