看板CompBook
标 题RunPC《泛型指标与 Traits 技术》 文章勘误
发信站清华资讯(枫桥驿站) (Tue Apr 11 17:30:56 2000)
转信站Ptt!bbs.ee.ntu!freebsd.ntu!news.cs.nthu!maple
RunPC《泛型指标与 Traits 技术》 文章勘误
侯捷
[email protected]
http://www.jjhou.com
此文亦将载於 2000/05 RunPC STL(4) 文章
------------------------------------------------------------
我於 2000/03 刊载於 Run!PC 杂志上的《泛型指标与 Traits 技术》
(亦曾於三月下旬张贴於 BBS/News CompBook 版上)一文 ,其中有
个错误,经金兴昇先生指正,十分感谢。
这个错误发生在 2000/03 Run!PC 杂志 p226 中段程式码。原码如下:
#01 template <class Node> // a tiny template wrapper class
#02 struct node_wrap {
#03 Node* ptr;
#04 ...
#05 Node& operator*() const { return *ptr; }
#06 Node& operator->() const { return ptr; }
#07 ...
#08 node_wrap& operator++() { ptr = ptr->next; return *this; }
#09 node_wrap& operator++(int) { node_wrap tmp = *this; ++*this; return tmp;}
#10 ...
#11 };
应改为(注意 #06, #09):
#01 template <class Node> // a tiny template wrapper class
#02 struct node_wrap {
#03 Node* ptr;
#04 ...
#05 Node& operator*() const { return *ptr; }
#06 Node* operator->() const { return ptr; }
#07 ...
#08 node_wrap& operator++() { ptr = ptr->next; return *this; }
#09 node_wrap operator++(int) { node_wrap tmp = *this; ++*this; return tmp;}
#10 ...
#11 };
经过这样的修改,p226 最下一行:
node_wrap<int_node> r; // vc6[o] cb4[x] g++[o]
应为:
node_wrap<int_node> r; // vc6[o] cb4[o] g++[o]
●心得:
原范例程式由於笔误之故,应该是错误的,但 VC6 和 G++ 却让它通过。
那是因为程式中刚好都没有呼叫那些错误的 member functions。
BCB4 和 BCB5 均拒绝让它通过,可见 BCB 严谨的预防功夫。
-- the end
--
※ Origin: 枫桥驿站<bbs.cs.nthu.edu.tw> ◆ Mail: [email protected]