对话#08:访问限制[6]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 taodm 的 blog

class point
{
public:
    inline double &operator[] (int index) {
        assert(index >=0 && index <= 2);
        return location[index];
     }
};

“嗨,漂亮吧!”这个,我喜欢。”这个越界检查在release版本中没有任何性能开销。”

guru点点头。”并且,”她又说道,”使用一个优化能力很强的编译器时,能生成和直接访问成员同样高效的代码,而又兼具着封装及其安全性。”

“所以,”我思索着,”实在没有理由存在公有数据成员,是吧?”

guru在回答前停了一下。 “在绝大多数情况下,没有理由。然而,如果一个类仅仅是一个便利性的数据聚合体,而不是对象模型-也就是说,c风格的struct,只有数据而没有额外行为-那么将所有数据置为公有是合理的 [4]。”

“你可以通过访问函数和mutator函数将私有成员暴露出去-但只在它真的有必要时。多余的getset函数-包括此处的operator []-表明你没有认真考虑封装。当测试表明访问函数真的存在运行期开销时,你可以通过将它们实现为inline来提高速度。当然,所得的提高因编译器而异-所以需要测试。”

“我明白了,老板,”我高兴地回答。她笑了,拢着手静静地走开了。我坐下来写好了测试代码。其结果,至少就我所使用的编译器而言,非常有趣[5]

 

approximate run-time in milliseconds

implementation

optimizations off

optimizations on

 

1: direct access

1061

251

 

2: inline accessor function

1673

本文关键:Herb Sutter,http://www.gotw.ca,Guru,“Conversation”
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top