Sad*_*ido 7 c++ parameters pointers reference
提供,我想将一个可修改的参数传递给一个函数,我应该选择什么:通过指针传递它还是通过引用传递它?
我问这个是因为我一直认为通过引用(1)传递参数是最好的做法,但在检查了一些本地代码数据库后,我得出结论,最常见的方法是(2).此外,该男子本人(Bjarne Stroustrup)建议使用(2).(1)和(2)的[dis]优点是什么,还是仅仅是个人品味的问题?
Chr*_*isW 22
在下列情况下,我更喜欢引用而不是指针:
有人说虽然引用和const引用之间的区别对于很多人来说太微妙了,并且在调用该方法的代码中是不可见的(即,如果你读取通过引用传递参数的调用代码,你可以'看看它是const还是非const引用),因此你应该把它作为一个指针(在调用代码中使它明确表示你要给出变量的地址,因此它的值是你的变量可能会被被调用者改变).
我个人更喜欢参考,原因如下:
[1.]意味着使调用者可见性变得无关紧要,因为调用者应该(通过其他方式)理解子例程的作用(包括它将修改参数的事实).
[2.]意味着如果它是一个指针,那么子程序应该处理参数为空指针的可能性,这可能是额外的和IMO无用的代码.
此外,每当我看到一个指针,我想,"谁将删除它,何时?",所以无论何时/何地所有权/生命/删除都不是问题,我更喜欢使用引用.
为了它的价值,我养成了编写const-correct代码的习惯:所以如果我声明一个方法有一个非const引用参数,那么它是非const的事实是重要的.如果人们没有编写const-correct代码,那么可能更难判断一个参数是否会在子例程中被修改,而另一个机制的参数(例如指针而不是引用)会更强一些.
通过引用传递的优点:
按值传递指针的优点:
由于引用传递是在语言中,因此任何非指针参数也可能会被修改,并且您不知道指针值正在被更改.我见过API,它们被视为常量.因此,指针传递并不能真正为读者提供他们可以信赖的任何信息.对于一些可能足够好的人,但对我来说却不是.
实际上,指针传递只是一个容易出错的凌乱黑客来自C,没有其他方法通过引用传递值.C++有办法,所以不再需要hack.