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