[英]Using a const-reference for assignment
我正在尝试遵循Google C ++样式指南,尤其是有关参考参数的部分 。 它说总是将引用作为const引用传递。 这似乎是个好主意,因为我不希望此功能与我的FilterBank
。 但是,在Instrument中有些地方我需要更改*filter_
,所以使filter_
const不是一个好的解决方案。 这是否意味着我应该传递一个指针FilterBank *f
? 这样做只是样式问题吗? 如果需要,可以在此函数中更改任何f
,这就是我要避免的事情。
//This code assigns the instrument's filter to some pre-made filter, f
void Instrument::set_filter_bank(FilterBank &f) {
filter_ = &f;
}
谢谢!
如果我对您的理解正确,那么您正在尝试允许Instrument
类通过成员指针( filter_
)来访问FilterBank
对象。 您可以通过成员函数set_filter_bank
设置该成员指针。 您不希望该成员函数修改该对象,因此希望使其成为const
引用。
但是这种推理是有缺陷的。 set_filter_bank
函数需要能够授予对filter_
指针的写访问权限。 问题是,一个函数不能授予它本身没有的访问权限。 因此,即使函数不修改对象,它也需要具有修改对象的权限才能将该权限授予其他人。 因此,无论您将其作为引用还是指针,都不能为const。
因此,如果您坚持遵循Google样式指南,则此处的适当参数是一个指针。
在我看来,您提供的链接的“决策”部分对此进行了解释:
决定:
在函数参数列表中,所有引用必须为const:
void Foo(const string &in, string *out);
实际上,在Google代码中有一个非常严格的约定,输入参数是值或const引用,而输出参数是指针。 输入参数可以是const指针,但除非约定需要,例如swap(),否则我们永远不允许非const引用参数。
但是,在某些情况下,使用const T *优于const T&作为输入参数。 例如:•您要传递空指针。 •该功能保存指向输入的指针或引用。 请记住,大多数时候输入参数将被指定为const T&。 相反,使用const T *可以向阅读器传达输入有所不同的方式。 因此,如果选择const T *而不是const T&,则出于一个具体原因; 否则可能会使读者寻找不存在的解释,从而使读者感到困惑。
在我看来,他们说的是,如果要将输入值传递给函数,请使用const引用,但是在定义输出值时,请使用指针。 这是为了向消费者明确您的功能期望。 const强制执行您不会更改指针的承诺。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.