不抛出异常的swap
来源:互联网 发布:交易平台软件使用协议 编辑:程序博客网 时间:2024/05/17 07:26
#include<iostream>using namespace std;/*1.提供一个public swap成员函数,让它 高效地置换你的 类型 的 两个成员对象 (绝不会抛出异常)2.在class 或 template 所在 命名空间 内 提供 一个 non-member swap(非成员 函数 的 swap), 并 令它 调用swap 成员函数3.为正在 编写的 类 class (非 class template),为你的 class 特化std::swap,并 令它 调用swap 成员函数4.如果你调用swap (例如 :在 dosomething函数 中 调用 swap函数 ),包含一个using 声明式 ,让std::swap在函数内曝光可见*//*成员版本swap绝不可抛出异常swap缺省版本 是以 copy构造函数 和 copy assignment操作符 为基础 (一般 两者 都允许 抛出异常)自定义 swap (1)高效置换对象值 (2)不抛出异常 (1)高效 基于 内置类型的 操作 (例如 pipml 手法的 底层指针) (2)内置类型的 操作 绝不会 抛出异常*/namespace WidgetStuff{ template<typename T> class WidgetImp1 { }; template<typename T> class Widget { public: Widget() { } Widget(const Widget<T>&rhs) { } Widget & operator =(const Widget<T> &rhs) { *pImp1 = *rhs.pImp1; } void swap(Widget &other) { using std::swap; swap(pImp1,other.pImp1); } public: WidgetImp1<T> *pImp1; }; /*template <typename T> void swap(Widget<T> &a,Widget<T> &b) { a.swap(b); cout<<"WidgetStuff:: void swap(Widget<T> &a,Widget<T> &b)"<<endl; }*/};namespace std/*std::模板特化版本*/{ using namespace WidgetStuff; template<> void swap(Widget<int> &a,Widget<int> &b)/*模板的全特化*/ { cout<<"std:: void swap(Widget<int> &a,Widget<int> &b)"<<endl; a.swap(b); }};template<typename T>void dosomething(T &obj1,T &obj2){ using std::swap;/*让std::swap在函数内曝光可见*/ swap(obj1,obj2); /*名称查找法则(确保将找到global作用域 或 T所在命名空间内任何T专属的swap*/ /*如果T是widget 并 位于 命名空间widgetstuff 内 , 编译器会使用“ 实参取决之查找规则” 找出 widgetstuff 内的 swap, 如果没有T专属之swap存在,编译器就会使用std内的swap 感谢using声明式让std::swap在函数内曝光*/}int main(){ using namespace WidgetStuff; Widget<int> a; Widget<int> b; swap(a,b); dosomething(a,b); return 0;}
1 0
- 不抛出异常的swap
- 不抛出异常的swap函数
- Item 25 不应抛出异常的swap
- 考虑写出一个不抛出异常的swap函数
- 考虑写出一个不抛出异常的swap函数
- effective c++:写出一个不抛出异常的swap函数
- 25考虑写出一个不抛出异常的swap函数——effective c++学习笔记
- 第四部分(4)(条款25:考虑写出一个不抛出异常的swap函数)
- 条款25:考虑写一个不抛出异常的swap函数
- Effective C++——》条款25:考虑写一个不抛出异常的swap函数
- 条款25:考虑写出一个不抛出异常的swap函数
- Effective c++(第三版) 条款25:考虑写出一个不抛出异常的swap函数
- 《Effective C ++ 》资源管理:条款25--考虑写出一个不抛出异常的swap函数
- 条款25:考虑写一个不抛出异常的swap函数
- effective c++ 考虑写出一个不抛出异常的swap函数
- 《Effect C++》学习------条款25:考虑写出一个不抛出异常的swap函数
- 读书笔记 effective c++ Item 25 实现一个不抛出异常的swap
- 读书笔记 effective c++ Item 25 实现一个不抛出异常的swap
- Oracle Restart可以用来给Oracle GoldenGate 做 High Availability 使用么?
- Android Wear开启通过蓝牙调试后,显示"主机:已断开连接"解决方法
- Notepad++直接编译运行Java
- 浅谈程序的性格
- 点分治 nbut1654 Ancient battle tree
- 不抛出异常的swap
- Unable to create Debug Bridge:Unable to start adb server
- 基于httpClient3的多线程版本,使用spring管理生命周期
- 不允许使用邮箱名称。 服务器响应为:authentication is required
- iOS 【UIKit-转换坐标系(2)】
- Java回调机制
- 使用 Intel HAXM 为 Android 模拟器加速
- HDOJ 1087 Super Jumping! Jumping! Jumping! (dp)
- 华为机试题: 求n!中含有0的个数(JAVA)