设为首页 加入收藏

TOP

4.3.6 高级议题
2013-10-07 15:00:18 来源: 作者: 【 】 浏览:70
Tags:4.3.6 高级 议题

4.3.6  高级议题

本节讨论关于optional的一些高级议题。

异常

optional<T>同STL容器一样,只提供基本的异常保证,不会超过被包装的类型T,它自身不抛出任何异常,只有在T构造时可能会抛出异常。

就地创建

optional<T>要求类型T具有拷贝语义,因为它内部会保存值的拷贝,但很多时候复杂对象的拷贝代价很高,而且这个值仅仅作为拷贝的临时用途,是一种浪费。因此optional库提出了"就地创建"的概念,可以不要求类型具有拷贝语义,直接用构造函数所需的参数创建对象。这导致发展出了另一个Boost库--in_place_factory。

in_place_factory库本书不作详细介绍,示范in_place()用于optional用法的代码如下:

  1. #include <boost/optional.hpp> 
  2. #include <boost/utility/in_place_factory.hpp> 
  3. using namespace boost;  
  4. int main()  
  5. {     
  6.  
  7.     //就地创建string对象,不需要临时对象string("....")  
  8.     optional<string> ops(in_place("test in_place_factory"));  
  9.     cout << *ops;  
  10.  
  11.     //就地创建std::vecotr对象,不需要临时对象vector(10,3)  
  12.     optional<vector<int> > opp(in_place(10, 3));  
  13.     assert(opp->size() == 10);  
  14.     assert((*opp)[0] == 3);  
  15. }  

引用类型

optional的模板参数类型可以是引用(T&),它在很多方面与原始类型T有不同,比如无法使用就地创建、就地赋值。与C++(www.cppentry.com)语言内置的引用类型不同的是,它可以声明时不指定初值,并且在赋值时转移包装的对象,而不是对原包装的对象赋值。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.4.6 高级用法 下一篇4.3.5 工厂函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: