4.3.1 "无意义"的值

2013-10-07 15:09:31 · 作者: · 浏览: 78

4.3  optional

optional库使用"容器"语义,包装了"可能产生无效值"的对象,实现了"未初始化"的概念。

optional位于名字空间boost,为了使用optional,需要包含头文件<boost/optional. hpp>,即:

  1. #include <boost/optional.hpp> 
  2. using namespace boost; 

4.3.1 "无意义"的值

函数并不是总能返回有效的返回值,很多时候函数可能返回"无意义"的值,这不意味着函数执行失败,而是表明函数正确执行了,但结果却不是有用的值。如果用数学语言来解释,就是返回值位于函数解空间之外。

例如,求一个数的倒数,在实数域内开平方,在字符串中查找子串,它们都可能返回无效的值。有些无效返回的情况可以用抛出异常的方式来通知用户,但有的情况下这样代价很高,或者不允许异常,这时必须要以某种合理的高效的方式通知用户。

表示返回值无意义最常用的做法是增加一个"哨兵"的角色,它位于解空间之外,如NULL、-1、EOF、string::npos、vector::end()等。但这些做法不够通用,而且很多时候不存在解空间之外的"哨兵"。

optional使用"容器"语义,为这种"无效值"的情形提供了一个较好的解决方案。