boost::swap】的更多相关文章

boost::swap是对标准库里的std::swap的增强和泛化,为交换两个变量的值提供便捷的方法. 为了使用需包含头文件: #include <boost/swap.hpp> 原理 c98标准中的std::swap(): template<typename T> void swap(T& a,T& b) { T tmp(a); a = b; b = temp; } 在标准库的swap中,要求交换的对象必须是可拷贝构造和可拷贝赋值的,效率低,需要进行一次复制构造和…
如何说服你的公司.组织使用Boost库 one of the most highly regarded and expertly designed C++ library projects in the world. 如何开始使用Boost库 Boost是一个库的集合,有一些库不需要考虑就可以开始使用.这就是boost/core/xxx.hpp. 可以不使用&,而是使用boost::addressof(变量)来取得变量的地址.它更可读,更安全,特别是当T类型重载了operator &时,它…
C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有魄力在项目中广泛采用boost复杂度会再加一层,抓狂的编译时间,井喷式的编译错误,运行时崩溃后的咒语式堆栈-- 其中好的东西还是值得用的,但凡事有个度.如果将应用做到boost这个级别了,要么你很牛,要么你在装. 用不用,看看还是有好处的.建议中高级以上C++程序员了解boost. 第1章 Boos…
转: 原理 c++是一个强类型的语言,要实现一个万能类型可以考虑用void*来保存数据,然后用类型转换进行操作,如: class MyAny{ MyAny(void* input):content_(input){ } template<typename T> T any_cast(){return *static_cast<T*>(content_)} private: void* content_; } 但是这样的写法有一个明显的缺点就是类型不安全. 显然我们可以用templa…
#include <iostream> #include<boost/array.hpp> int main() { boost::array<int, 6> arr = {1,2,3,4,5,6}; boost::array<int, 6> arr2 = {7,8,9,10,11,12}; std::copy(arr.begin(), arr.end(), std::ostream_iterator<int>(std::cout, "…
C++是强类型语言,所有强类型语言对型别的要求都是苛刻的,型别一有不合编译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操作符或是标准所允许的一定程度的隐式转换(如经过非explicit构造函数创建临时变量的隐式转换或是在int,long这些基本型别间的)又另当别论.总的说来,为了保持型别安全,C++有严厉的要求.然而有时候程序员可能有这样的需要: int i; iong j; X x; //假设X为用户定义的类 any anyVal=i; ... //use anyVa…
C++ STL的几种常用“比较”概念简述   在C++的现行标准(C++ 98)中,由于没有类似“接口”这样的东西,我们在泛型编程时往往只能对模板类型作一些假设,要求其符合某个需求清单,也就是属于某个概念.这只是一种人 为的约定,一旦该约定未被遵守,编译器可能会无法有效地发现问题原因所在.不过,在即将发布的C++ 0x中将引入concept,可以较好地解决这个问题.扯远 了,让我们回到正题.       STL中所有泛型算法和容器模板都对涉及到的元素所属概念有明确要求,在使用这些算法和容器时必须…
boost源码剖析----boost::any 有的时候我们需要有一个万能类型来进行一些操作,这时候boost::any就派上用场了. boost::Any testInt(10); int val = static_cast<int>(testInt); 用法比较简单,我们来研究下boost::any是如何实现的. 原理 c++是一个强类型的语言,要实现一个万能类型可以考虑用void*来保存数据,然后用类型转换进行操作,如: class MyAny{ MyAny(void* input):c…
<Boost程序库探秘——深度解析C++准标准库>之试读 前一阵子还看到一篇文章,说C#要重蹈C++的覆辙,这里说的C++的覆辙是什么呢?是指C++语言过于臃肿的功能特性,导致学习人员的流失.文章说,语言最后的威力是“开发软件”,而不是“比拼新特性” 在大学中,C++算是比较难学的语言.有些学校试图直接让学生们学习C++,结果效果不怎么好.这次,C++11又添加了大量新特性,如lambda,auto等,把C++弄的像动态语言一样. 添加了那么多新特性,而为了照顾用户的习惯和已有的代码.又不能去…
意义 当compressed_pair的某一个模板参数为一个空类的时候将对其进行“空基类优化”,这样可以使得compressed_pair占用的空间比std::pair的更小. 参考如下代码: #include <iostream> using namespace std; #include <boost/compressed_pair.hpp> class A{}; class B{}; int main() { cout<< sizeof( std::pair<…