Robin Chow's C++ Blog

 

[导入]Exceptional C++ 之 3

真正的拷贝构造函数或者拷贝赋值运算符只对完全相同类型的对象施以构造或赋值操作,并且,其如果是一个模板类的话,模板的参数也必须完全相同。模板“构造函数”和模板“赋值运算符”都不是真正的拷贝构造函数和赋值运算符,因此这种模板函数的出现并不会隐藏原来隐含的拷贝构造函数的声明。

文章来源:http://my.donews.com/robinchow/2007/01/10/lhiltldtjwkukgbtacjqkosnhqibccxojgzc/

posted @ 2007-10-23 21:01 Robin Chow 阅读(184) | 评论 (0)编辑 收藏

[导入]Exceptional C++ 之 2

标准库中 string 的模板类:

template<class charT,
class traits= char_traits
class Allocator = allocator<charT> >
class basic_string;

其中 char_traits 部分,它决定了字符的相互作用和比较运算,如eq()(相等)、ne()(不等)、lt()(小于)、compare()(比较字符序列)、find()(搜索字符序列)。因此只需重定义 char_traits 模板即可改变 string 的字符比较操作。
文章来源:http://my.donews.com/robinchow/2007/01/10/cfjorztxnorsmkaafyrckgebtdmemrppxzeo/

posted @ 2007-10-23 21:01 Robin Chow 阅读(186) | 评论 (0)编辑 收藏

[导入]Exceptional C++ 之 1

设计准则:绝对不要解引用一个无效的 iterator。
摘要:
  1. 有效的数值:iterator 指向的位置有效。
  2. 有效的寿命:iterator 使用时仍然有效。
  3. 有效的范围:一对 iterators 组成一个有效的范围,first 在 last 之前(或相等),并且两者指向同一个container。
  4. 防止不合法的操作行为,如修改内置类型的暂时对象。

文章来源:http://my.donews.com/robinchow/2007/01/10/rwyjwpstnlvfjtxeqzrupbzdkijaqyohunrq/

posted @ 2007-10-23 21:01 Robin Chow 阅读(205) | 评论 (0)编辑 收藏

[导入]Exception C++ 之 18

C++ 中 bool 是一个基本类型,可以通过各种方法来模拟它,但是都存在不同的缺陷:
  1. 使用 typedef 模拟,bool 不允许重载。
  2. 使用 #define,bool 不允许重载且通常破坏了 #define。
  3. enum bool允许重载但在条件表达式中不能进行自动类型转换。bool b = (i == j)是错误的,因为 int 不能隐含地转换成 enums。
  4. bool 类允许重载但不能让 bool 对象在条件中作测试,除非它能提供自动转换到基本类型,但是提供自动转换却通常会干扰函数重载解析过程。

文章来源:http://my.donews.com/robinchow/2007/01/15/bszvusphgepqbphvticopjkpfadfapccibyd/

posted @ 2007-10-23 20:51 Robin Chow 阅读(89) | 评论 (0)编辑 收藏

[导入]Hohoho

http://www.ianai.net/jokes/WillNotThrow.gif
文章来源:http://my.donews.com/robinchow/2007/01/15/cglotemjvscvgbjpnasvjzxcgxvqqugtbsiv/

posted @ 2007-10-23 20:51 Robin Chow 阅读(76) | 评论 (0)编辑 收藏

[导入]不使用第三个数来交换两个数的值的方法(英文)



Interchanging 2 variables without the use of a third - Programming/PHP
文章来源:http://my.donews.com/robinchow/2007/01/15/nbctysjyzmipdsnjkfhkwjgoqubiylxlmael/

posted @ 2007-10-23 20:51 Robin Chow 阅读(117) | 评论 (0)编辑 收藏

[导入]C++ 代码优化(英文)

值得一看:

C++ Code Optimizations
文章来源:http://my.donews.com/robinchow/2007/01/15/bimskiqoaxkxvxlvzbfgoxtnrlgtocbpkohu/

posted @ 2007-10-23 20:51 Robin Chow 阅读(105) | 评论 (0)编辑 收藏

[导入]Exception C++ 之 17

  1. 建议总是使用“SomeType t(u)”的形式,一来是因为只要可以用“SomeType t = u”的地方也同样可以用它;二来是因为它还有一些其它的有点,比如支持多个参数等。
  2. 关于 const:
    • 如果函数的返回类型不是一个内建(built-in)的类型的话,通常应该将其返回类型也声明为 const。这样可以避免该函数的调用者企图修改临时对象。
    • 对于传引用作为实参,可以将其声明为 const 以防止对其进行修改;如果使用传值,则没有必要声明为 const。
    • 如果一个函数从逻辑上来说是 const 的,则应该将其声明为 const 函数,即使该函数实际修改了对象的状态,这时候必须将要修改的值声明为 mutable。
  3. 关于类型转换:
    • dynamic_cast:对公有继承的基类和派生类进行转换,转换失败时返回 NULL。
    • reinterpret_cast:对于互不相同、区别开来的类型(例如函数指针),尽管它们之间存在着隐式转换,它们也是互无联系的,应该用 reinterpret_cast 进行转换。




文章来源:http://my.donews.com/robinchow/2007/01/15/HxCWeJTzfsIHxGSohwbqozDYDPwcLcYtAApF/

posted @ 2007-10-23 20:51 Robin Chow 阅读(108) | 评论 (0)编辑 收藏

[导入]Exception C++ 之 16

  • 如果需要的话,请编写一个私有函数来使拷贝操作和拷贝赋值共享代码;千万不要利用“使用显式的析构函数并且后面跟一个 placement new”的方法来达到“以拷贝构造操作实现拷贝赋值操作”这样的目的。也就是说,决不要编写如下的代码:
    T& T::operator=(const T &other)
    {
        if(this != &other)
        {
           this->~T();               // 有害!
           new (this) T(other);   // 有害!
        }
        return *this;
    }
  • 关于拷贝赋值操作符有两点需要注意:
    1. 将拷贝赋值操作声明为“T& T::operator=(const T&)”
    2. 不要返回 const T&,尽管这样做避免了诸如“(a = b) = c”的用法;这样做意味着:你无法出于移植性的考虑而将 T 对象放入标准程序库之容器 -- 因为其需要赋值操作返回一个单纯的 T&。

文章来源:http://my.donews.com/robinchow/2007/01/14/uufhhtovwfvygicxibjufbugcnhamivhcapk/

posted @ 2007-10-23 20:51 Robin Chow 阅读(61) | 评论 (0)编辑 收藏

[导入]Exception C++ 之 15

使用 auto_ptr(灵巧指针)的注意事项:
  1. 对于 auto_ptr,拷贝不是对等的。右侧的对象不再拥有对象的所有权。
  2. 不再拥有所有权的 auto_ptr 的指针会被置为 NULL,因而对它的解引用会导致错误。
  3. 使用 const auto_ptr 可以防止将该灵巧指针赋值给其他灵巧指针。

文章来源:http://my.donews.com/robinchow/2007/01/14/xzuxgvbkpleammqcmlzlsjhkcqmgfdpddjaj/

posted @ 2007-10-23 20:51 Robin Chow 阅读(65) | 评论 (0)编辑 收藏

仅列出标题
共9页: 1 2 3 4 5 6 7 8 9 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜