我遇到了这个。
根据样式指南,只允许const引用作为参数。 (这就是我所理解的)
虽然,我似乎不喜欢这种方法。
评论
答案 0 :(得分:7)
澄清一下,这是一个解释其论点根源的例子。
Car c;
foo(c);
c是否被函数修改取决于它是如何声明的,只是查看调用本身并没有给出关于可能发生什么的很多指示。
void foo(Car c);
void foo(const Car &c); OR
void foo(Car &c);
现在考虑
Car c;
foo(&c);
在传递了对象的地址后,更容易看到(从调用者的角度来看)该函数是否可能正在更改您的对象。当然,它并不能保证它是一个指向const对象的指针,但从代码审查者的角度来看,当函数传递指针时,更容易检测到这个对象可能会被更改。当严格执行Google的建议时,通过指针传递的对象总是可变的,而不通过指针传递的任何东西都是const。 (通过const&或b / c传递值)
这是否更好是值得商榷的。我会决定你的团队感受和保持一致。
答案 1 :(得分:5)
以下是一些经验法则,在决定您的选项时非常有用:
如果不需要修改传递给函数的对象,请考虑对象的大小是否小于或等于指针的大小。如果是这样,按值传递;否则,通过const引用。
如果执行需要修改传递给函数的对象,请考虑参数是否可选(即null是有效参数)。如果是这样,通过指针;否则,通过非const引用。
答案 2 :(得分:2)
它还可以让你做到
void x(const std :: string& x)
X( “你好”);
没有const它就行不通。