use*_*855 0 c++ pass-by-reference
我遇到过这个.
根据样式指南,只允许const引用作为参数.(这就是我的理解)
虽然,我似乎不喜欢这种方法.
评论?
Google建议只使用const引用,因为他们觉得在函数修改对象时传递指针更清晰.这可能是真的,但我更喜欢只在null是可接受的值时才使用指针.
为了澄清,这里有一个例子来解释他们论证的根源.
Car c;
foo(c);
Run Code Online (Sandbox Code Playgroud)
c是否被函数修改取决于它是如何声明的,只是查看调用本身并没有给出关于可能发生什么的很多指示.
void foo(Car c);
void foo(const Car &c); OR
void foo(Car &c);
Run Code Online (Sandbox Code Playgroud)
现在考虑
Car c;
foo(&c);
Run Code Online (Sandbox Code Playgroud)
传递了对象的地址后,更容易看到(从调用者的角度来看)该函数是否可能正在更改您的对象.当然,它并不能保证它是一个指向const对象的指针,但从代码审查者的角度来看,当函数传递指针时,更容易检测到这个对象可能会被更改.当严格执行Google的建议时,通过指针传递的对象总是可变的,而不通过指针传递的任何东西都是const.(通过const&或b/c传递值)
这是否更好是值得商榷的.我会决定你的团队感受和保持一致.
在决定您的选项时,以下是一些经验法则:
如果你没有需要修改被传递到函数对象,考虑对象的大小是否小于或等于指针的大小.如果是这样,按值传递; 否则,传递const引用.
如果确实需要修改传递给函数的对象,请考虑参数是否可选(即null是有效参数).如果是这样,通过指针; 否则,通过非const引用.