`
ijavagos
  • 浏览: 1187230 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

25考虑写出一个不抛出异常的swap函数——effective c++学习笔记

阅读更多

std::swap是一个模板,他提供的是置换操作,即将同一类型对象a,b互换内部值。swap操作要求对象支持copying构造函数和copying赋值函数,在内部操作上,他使用了三个赋值对象。

这里有一个问题,就是对于特定的对象,它的效率会非常的低。所以我们要针对特定的对象进行特殊的swap

总结:

<!--[if !supportLists]-->1、 <!--[endif]-->如果swap的缺省实现码对你的class或者class template提供可以接受的效率,你不需要额外做任何事情,。

<!--[if !supportLists]-->2、 <!--[endif]-->如果swap缺省实现版的效率不足,试着做下面的事情

<!--[if !supportLists]-->(1) <!--[endif]-->提供一个public swap函数,让他高效的置换你的类型的两个对象,这个函数不可以抛出异常。这一限制仅限于成员版swap

<!--[if !supportLists]-->(2) <!--[endif]-->在你的classtemplate所在的命名空间内,提供一个non-member swap,并令他调用swap成员函数。

<!--[if !supportLists]-->(3) <!--[endif]-->如果你正在编写一个classtemplate,为你的class特化std::swap,并令他们调用你的swap函数。

<!--[if !supportLists]-->3、 <!--[endif]-->如果你调用swap,请确保包含一个using声明式,以便让std::swap在你的函数内曝光可见,然后不叫任何namespace修饰符,赤裸裸的调用swap

注意:

<!--[if !supportLists]-->1、 <!--[endif]-->std::swap效率不高时,提供一个swap成员函数,并确保这个函数不抛出异常。

<!--[if !supportLists]-->2、 <!--[endif]-->如果你提供一个members swap,也应该声明一个non-member swap来调用前者,对于classes而非template,也请特化std::swap

<!--[if !supportLists]-->3、 <!--[endif]-->如果你调用swap,请确保包含一个using声明式,以便让std::swap在你的函数内曝光可见,然后不叫任何namespace修饰符,赤裸裸的调用swap

<!--[if !supportLists]-->4、 <!--[endif]-->为用户定义类型进行std template全特化是好的,但千万不要尝试在std内加入某些对std而言全新的东西。

分享到:
评论

相关推荐

    C++整理笔记word版——01 C++学习笔记

    C++基础的学习笔记(其中的代码源件可私信留言) C++中的空头程序 使用C++书写hello world 学习变量 学习常量 标识符命名规则 数据类型 运算符 程序流程结构 数组 函数 指针 结构体

    Effective Modern C++学习笔记

    《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...

    Effective C++ 中文版

    条款25:考虑写出一个不抛异常的swap函数 5.实现 条款26:尽可能延后变量定义式的出现时间 条款27:尽量少做转型动作 条款28:避免返回handles指向对象内部成分 条款29:为“异常安全”而努力是值得的 条款30...

    Effective C++.mobi kindle可用

    如果你知道如何去做,写出高效的 C++ 程序并不特别难。然而,如果不经训练就贸然使用,C++ 也会导致不可理解的,难以维护的,无法扩展的,低效率的,错误百出的代码。 wizardforcel. Effective C++ (Kindle 位置 ...

    C++学习笔记--函数指针

    C++学习笔记--函数指针 函数指针 程序运行期间。每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。我们可以将函数入口地址赋给一个指针变量,使该指针变量...

    交换函数2_swap_c++交换函数_

    能够实现参数的交换,swap函数利用变量的引用实现

    Effective Modern C++:改善C++11和C++14的42个具体做法(中文版 + 英文版)

    《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和...

    csv文件的操作函数————C语言

    用于对csv表格的基本操作,如添加、修改、删除、排序、插入、设置文件属性等(转)

    C#学习笔记之——调用C++

    详细介绍了C#调用C++函数的步骤,经过编译,可以使用

    Effective_Modern_C++_中文版

    想要彻底理解C++11和C++14,不可止步于熟悉它们引入的语言特性(例如,auto型别推导、移动语义、lambda表达式以及并发支持)。挑战在于高效地运用这些特性——从而使你的软件具备正确性、高效率、可维护性和可移植性...

    C++整理笔记word版 ——02 C++核心编程

    C++整理笔记word版 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。是01 C++学习笔记的后续补充 内存分区模型 引用 函数提高 类和对象 文件操作

    excel函数——Vlookup函数

    讲述excel函数——Vlookup函数

    C++ 异常类 抛出与捕获异常

    C++通用异常类 可以获得 抛出异常的行数,函数,所在文件 捕获异常的行数,函数,所在文件

    韩顺平Oracle笔记——函数.pptx

    韩顺平Oracle笔记——函数.pptx韩顺平Oracle笔记——函数.pptx

    C++——函数模板.txt

    建立一个通用的函数,函数类型和形参不具体指定,用一个虚拟的类型代表。 只要是函数体是相同的就可以用这个模板代替。 (只适用于函数的参数个数相同而类型不同,且函数体一致的情况,如果参数个数不同,则不适用。

    C++编程思想——学习C++的好书

    本书作者根据自己学习C++的亲身体会及多年教学经验,用简单的例子和简练的叙述讲解C++编程,别具特色。 全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流...

    前端学习(四)——javascript学习笔记(二)函数

    前端学习——javascript学习笔记(二)函数

    Excel函数——信息函数.pdf

    Excel函数——信息函数.pdf

    Effective C++

    Effective C++(编程的50个细节)着重讲解了编写C++程序应该注意的50个细节问题,书中的每一条准则描述了一个编写出更好的C++的方式,每一个条款的背后都有具体范例支持,书中讲的都是C++的编程技巧和注意事项,很多都...

Global site tag (gtag.js) - Google Analytics