条款25:考虑写出一个不抛异常的swap函数
2014-06-08 00:18
288 查看
结论1:首先,如果swap的缺省实现码对你的class或class template提供可接受的效率,不需要额外做任何事。
结论2:当std::swap对你的类型效率不高时(几乎总意味着你的class或tempalte使用了某种pimpl(pointer to implementation的缩写)手法),则
(1)提供一个public swap成员函数,让它高效地置换你的类型的两个对象值,并确保这个函数不抛出异常,因为高效的swaps几乎总是基于对内置类型的操作,而内置类型上的操作绝不会抛出异常。
(2)在你class或template所在的命名空间内提供一个non-member swap,并令它调用public swap成员函数。
(3)如果你正在编写一个class(而非class template),为你的class特化std::swap,并令它调用public swap成员函数。
(4)调用swap时应针对std::swap使用using 声明式,以便让std::swap在你的函数内曝光可见,然后不加任何namespace修饰符,赤裸裸地调用swap。
结论3:通常不能够改变std命名空间内的任何东西,但可以为标准template制造特化版本,使它专属于“用户自定义类型”。
C++允许对class template、function template全特化(模板特化即有时为了需要,针对特定的类型,需要对模板进行特化,也就是特殊处理),即对所有模板参数均特化,但只允许对class template偏特化,不允许对function
template偏特化,即只特化部分模板参数。
结论2:当std::swap对你的类型效率不高时(几乎总意味着你的class或tempalte使用了某种pimpl(pointer to implementation的缩写)手法),则
(1)提供一个public swap成员函数,让它高效地置换你的类型的两个对象值,并确保这个函数不抛出异常,因为高效的swaps几乎总是基于对内置类型的操作,而内置类型上的操作绝不会抛出异常。
(2)在你class或template所在的命名空间内提供一个non-member swap,并令它调用public swap成员函数。
(3)如果你正在编写一个class(而非class template),为你的class特化std::swap,并令它调用public swap成员函数。
(4)调用swap时应针对std::swap使用using 声明式,以便让std::swap在你的函数内曝光可见,然后不加任何namespace修饰符,赤裸裸地调用swap。
结论3:通常不能够改变std命名空间内的任何东西,但可以为标准template制造特化版本,使它专属于“用户自定义类型”。
C++允许对class template、function template全特化(模板特化即有时为了需要,针对特定的类型,需要对模板进行特化,也就是特殊处理),即对所有模板参数均特化,但只允许对class template偏特化,不允许对function
template偏特化,即只特化部分模板参数。
相关文章推荐
- 条款25:考虑写出一个不抛异常的swap函数
- 《Effective C++》条款25:考虑写出一个不抛异常的swap函数
- Effective C++:条款25:考虑写出一个不抛异常的swap函数
- 条款25:考虑写出一个不抛异常的swap函数
- 条款25 考虑写出一个不抛异常的swap函数
- Effective c++(第三版) 条款25:考虑写出一个不抛出异常的swap函数
- 《Effective C++》学习笔记条款25 考虑写出一个不抛异常的swap函数
- 条款25:考虑写出一个不抛异常的swap函数(Consider support for a non-throwing swap)
- 读书笔记《Effective C++》条款25:考虑写出一个不抛异常的swap函数
- 条款25:考虑写出一个不抛出异常的swap函数
- 条款25:考虑写出一个不抛出异常的swap函数
- Effective C++ -----条款25:考虑写出一个不抛异常的swap函数
- 条款25:考虑写出一个不抛异常的swap函数
- Effective C++ 条款25:考虑写出一个不抛异常的swap函数
- 条款25:考虑写出一个不抛异常的swap函数
- 《Effect C++》学习------条款25:考虑写出一个不抛出异常的swap函数
- Effective C++:条款25:考虑写出一个不抛异常的swap函数
- 条款25 考虑写出一个不抛异常的swap函数
- 《Effective C ++ 》资源管理:条款25--考虑写出一个不抛出异常的swap函数
- effective C++ 条款 25:考虑写出一个不抛出异常的swap函数