4.3.1 "无意义"的值
函数并不是总能返回有效的返回值,很多时候函数可能返回"无意义"的值,这不意味着函数执行失败,而是表明函数正确执行了,但结果却不是有用的值。如果用数学语言来解释,就是返回值位于函数解空间之外。
例如,求一个数的倒数,在实数域内开平方,在字符串中查找子串,它们都可能返回无效的值。有些无效返回的情况可以用抛出异常的方式来通知用户,但有的情况下这样代价很高,或者不允许异常,这时必须要以某种合理的高效的方式通知用户。
表示返回值无意义最常用的做法是增加一个"哨兵"的角色,它位于解空间之外,如NULL、-1、EOF、string::npos、vector::end()等。但这些做法不够通用,而且很多时候不存在解空间之外的"哨兵"。
optional使用"容器"语义,为这种"无效值"的情形提供了一个较好的解决方案。