Re: [cpp] 请教一个函数的问题

liangml liangml at 6636.com
Tue Mar 7 09:56:38 CST 2006


-----------------------应该说保留是有些必要的..................----------------------------

63577982 07:59:20
大家好。请假一个关于函数的问题。
class NODE; //假设NODE是一个足够复杂的类
void dosomething1( const NODE & node );
void dosomething2( NODE node );
我觉得,dosomething1明显比dosomething2的效率要高,因为省略了一个拷贝构造NODE类型的时间。
那么,为什么还会存在dosomething2这种用法?其有什么比用法1好的地方呢?
在我现在看来,用法2可以做的地方,用法1都可以做,而且效率要高。
本人愚昧,请大家指点一下。 

 63577982 08:40:11
恩,我蛮困惑的。
如果用法2没有用法1好的话,那C++函数里面为何要拷贝一份NODE呢?
不知道这样有何意义。先下了,大家有知道的。麻烦告知一下。 

果子 09:40:17
保留
void dosomething2( NODE node );
应该是必须的吧 
果子 09:40:50
假设dosomething2和caller是一个异步的过程,caller发起调用后继续去对node做改变 
果子 09:41:13
这个时候dosomething2里面的node值也会跟着改变,这是caller所不希望的 
果子 09:41:21
是一个副作用 
果子 09:41:34
所以第二种方法能够提供一个snapshot 
果子 09:43:24
还有,如果你传了const,那么类里面你要调用的方法必须也是const,而往往这个类要提供好多个方法是非const的给别的地方用 
 裕作 09:44:12
Const的方法?还是说Static? 
果子 09:45:58
我是这个意思
 
果子 09:46:07
class A
{
public:
 void b()
};

void AA(const A & a)
{
 a.b();
} 
果子 09:46:23
这种代码编译会失败.因为你传的是const A& 
果子 09:46:33
而你试图调用一个非const的member function 
果子 09:46:44
应该这样写:
class A
{
public:
 void b() const;
};

void AA(const A & a)
{
 a.b();
} 
果子 09:47:17
 void b() const;
说明了b()无法改变A的member的值,也就是它使用的是
const this 
果子 09:47:57
如果允许你调用void b()的话,那这个const A&就几乎没意义了.因为你能通过它的结构随便改变类里面的东西 



  ----- Original Message ----- 
  From: 千里马肝 
  To: C++ Discuss Group 
  Sent: Tuesday, March 07, 2006 9:40 AM
  Subject: 答复: [cpp] 请教一个函数的问题


  c++里应该再不会出现第二种形式了吧,个人认为其没有存在的价值
  即使想直接拿着参数进行操作,那也可以用第一种形式,然后在函数体内自行复制也是一样
  而第一种本质上等同于传了一个Pointer进去(可能由compiler自动转换)
    -----原始邮件-----
    发件人: cpp-bounces at codingnow.com [mailto:cpp-bounces at codingnow.com]代表 苏益ꪏ
    发送时间: 2006年3月7日 8:23
    收件人: cpp at codingnow.com
    主题: [cpp] 请教一个函数的问题


    大家好。请假一个关于函数的问题。

    //假设NODE是一个足够复杂的类
    class NODE; 
    void dosomething1( const NODE & node );
    void dosomething2( NODE node );

    我觉得,dosomething1明显比dosomething2的效率要高,因为省略了一个拷贝构造NODE类型的时间。
    那么,为什么还会存在dosomething2这种用法?其有什么比用法1好的地方呢?
    在我现在看来,用法2可以做的地方,用法1都可以做,而且效率要高。

    本人愚昧,请大家指点一下。 




          =============================================== 
          快来和我一起享受TOM免费邮箱吧! 看看除了1.5G,还有什么? 

              敲开精彩 聊天世界:网通用户 电信用户 

          明星送祝福(http://sr.tom.com): 周杰伦  蔡依林  王力宏  田震  代您送去生日祝福 

          万首金曲免费送(http://mm.tom.com/ivr/) : 你到底爱谁   千年之恋  我是真的爱你   一辈子做你的女孩 

          全部彩铃免费送(http://mm.tom.com/cailing/): 我发财了发财了  你喜欢我就说嘛  两只蝴蝶   冲动的惩罚 
          ===============================================  



------------------------------------------------------------------------------


  _______________________________________________
  Cpp mailing list
  Cpp at codingnow.com
  http://codingnow.com/mailman/listinfo/cpp
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codingnow.com/pipermail/cpp/attachments/20060307/6289db38/attachment-0001.html


More information about the Cpp mailing list