带CONST 的字符串参数效率是否比不带CONST的低?(50)

  • 主题发起人 roadexplorer
  • 开始时间
R

roadexplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
function a(const s: string): string;和function a(s: string): string;
 
S

smsman

Unregistered / Unconfirmed
GUEST, unregistred user!
const 在 delphi中作用:一,这个参数的值在函数中不可改变,避免意外的错误 基本功能二,这个参数对string类型是传址而不是传值 在Delphi中,.对于 Size > 4 bytes 的参数,const 方式实际也是通过引用来传递参数的.因此,一般 const 快一点.如果参量长度超过4字节或是接口、字符串、动态数组类型,使用const参数,可以使编译器以地址方式传递,并且不对引用技术做修改。三,对于string类型的参数,声明成const有助与编译器优化代码,提高程序效率delphi帮助中有:Using const allows the compiler to optimize code for structured- and string-type parameters.所以,在Delphi中,我认为针对你提的string类型带CONST 的字符串参数效率是否比不带CONST的高。但是在C++中,对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const 引用传递”,目的是提高效率。例如将void Func(A a) 改为void Func(const A &a)。对于内部数据类型的输入参数,不要将“值传递”的方式改为“const 引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void Func(int x) 不应该改为void Func(const int &x)。所以,在C++中,带CONST 的字符串参数效率是否比不带CONST的低是对的。个人见解,有错误欢迎指正。
 
R

roadexplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢楼上的解析,想都用CONST,只是担心用CONST,编译器会将参数S再复制一遍,这样就会影响效率,只要不比未用CONST速度一样,就无所谓了.在DELPHI中像Uppercase和stringreplace这样的函数倒是都用的const
 
M

muhx

Unregistered / Unconfirmed
GUEST, unregistred user!
使用const 还有一个好处是可以让读你代码的人清楚知道这个参数是不能为修改的,增强了代码的可读性。BTW,StringReplace的效率很低,如果想提高效率,可以下载一个QStrings单元
 
D

dirk

Unregistered / Unconfirmed
GUEST, unregistred user!
const的string参数即便效率高,也高不了多少,但是带const的string参数的方法却不是很安全,因为使用了const,string实参的引用记数不会被增加,导致在某些正常的代码里,string实参会被提前释放,建议string类型参数不要用const。具体代码可看我的以前的问题。
 
R

roadexplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
照您这么说,还真不敢随便加CONST
 
S

smsman

Unregistered / Unconfirmed
GUEST, unregistred user!
Dirk的帖子地址:http://www.delphibbs.com/delphibbs/dispq.asp?lid=2156027不过我觉得没有这么严重了,如果确定不会对参数更改的话用还是有点儿好处的。尤其是对大字符串的情况。我的程序基本没有会去更改const变量的地方,可能更改都用Var了,而且对Pchar,array等结构没有这个问题。
 
R

roadexplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部