繁体   English   中英

使用const引用进行赋值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM