• 8386阅读
  • 3回复

【提问】这个形参怎么传递好? [复制链接]

上一主题 下一主题
离线kytexzy
 

只看楼主 倒序阅读 楼主  发表于: 2005-12-21
我的一个类的public成员函数:
bool setMaterialCode(QString materialCode);

我不知道对于QString类型的参数是传递为引用
bool setMaterialCode(QString &materialCode);

是否更好些?
[ 此贴被XChinux在2005-12-21 19:47重新编辑 ]
try to find forgiveness for yourself and forgive others
离线sunbo
只看该作者 1楼 发表于: 2005-12-21
c++的参数传递分3种类型,值,地址(*或叫指针)和引用(&),
值传递:函数将拷贝一个一模一样的对象在函数中使用,对该参数的任何操作都不影响函数外部的变量,优点是操作安全,缺点是对于大参数,如一个含有大量成员变量的类,耗费内存
地质传递:实际上是函数拷贝了一个值针变量,使用地址来操作外部的变量,你可以改变这个指针变量,让他指向一个任何你想要的同类的对象不影响外部的指针所指的对象,注意如果是改变指针所指的对象的内容,也就是使用类似语句*x=y; 实际上是指针所指的外部的对象被改变了。地质传递,内春开销很小,一个参数值占4个或8个字节(32位或64位地址指针)
引用传递:直接使用函数外部建立的对象,基本上不消耗内存,对该参数的操作实际上就是对函数外部的对象进行操作,所以一定要注意函数中对该参数的改变将影响该对象在函数外部任何其他地方的值,类似使用*号的地质传递的操作。
qt的参数传递也是遵守以上的规则,针对问题可以考虑用什么样的参数。
离线XChinux

只看该作者 2楼 发表于: 2005-12-21
如果只是需要得到字符串的值,而不要修改它,那就加上const限制
bool setMaterialCode(const QString &materialCode);
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线myer

只看该作者 3楼 发表于: 2005-12-22
see about "Implicitly Shared " class in Qt.
Qt中QString等很多类都是"Implicitly Shared " class ,因此传递引用或者值并不立即引起大量数据copy操作。推荐用“QString materialCode”,当然如果有特别目的则例外。
另,指针较引用可能在代码清晰度上好一些
视个人喜好吧,都无所谓的。
http://user.qzone.qq.com/56430808
快速回复
限100 字节
 
上一个 下一个