条款25:考虑写出一个不抛异常的swap函数

来源:互联网 发布:网络推广工资一般多少 编辑:程序博客网 时间:2024/05/01 15:51

一、杂项

 1.通常我们不能够(不被允许)改变std命名空间内的任何东西,但可以(被允许)为标准templates(如swap)制造特化版本。

 2.koening lookup法则

    namespace myspace{

         class a {};

         class b {};

         template<typename T>

             func(T & t1, T & t2);

    }

    在使用时,如果实参是同一命名空间时,可以不指定函数的命名空间。如:

    myspace::a a1;

    myspace::b b1;

    func(a1, b1);           //可以不指定函数的命名空间

二、总结

  1.当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛出异常。(因为swap得一个最好的应用时帮助classes和class templates提供强烈的异常安全性保障,但此技术基于一个假设:成员版的swap绝不跑出异常)。

  2.如果你提供一个member swap,也该提供一个non-member swap用来调用前者。对于classes(而非templates),也请特化std::swap。

  3.条用swap时应针对std::swap使用using声明式,然后调用swap并且不带任何“命名空间资格修饰”。

  4.为“用户自定义类型”进行std templates全特化是好的,但千万不要尝试在std内加入对std而言全新的东西。

原创粉丝点击