const引用参数

以下声明是否有区别?

void somefunc(const Person &p); void somefunc(Person const &p); 

没有区别const绑定到左边的types,除非它是声明的第一部分,在这种情况下,它绑定到右边。

请参阅: https : //isocpp.org/wiki/faq/const-correctness#const-ref-alt

就我个人而言,我发现const T &x更好。 据此,Bjarne也喜欢把const放在第一位。 具体而言,因为关键字最初将被称为readonlyreadonly int x读取更好:-P。

就在这里! 第一个更可读:)

看到这个http://www.parashift.com/c++-faq-lite/const-correctness.html

(请参阅新链接: https : //isocpp.org/wiki/faq/const-correctness#const-ref-alt )

具体是18.6到18.8。

[18.6]“const Fred&x”是什么意思?

它意味着x别名一个Fred对象,但是x不能用来改变那个Fred对象。

[18.7]“Fred&const x”是否有意义?

不,这是无稽之谈。

[18.8]“Fred const&x”是什么意思?

Fred const&x在function上等同于const Fred&x。 但是,真正的问题是应该使用哪一个。

阅读文章的其余部分了解更多信息。 但基本上,它说它们是等价的,你可以使用任何一个,只要你认为合适。 但是,你应该select一个并坚持下去,以避免将来的混乱。

这真的是一个品味的问题。

如果从右向左读取,“ Person const & x ”读取“x是对一个常量Person的引用”。

这听起来比“ const Person & x ”更好,这将是“x是对Person的引用,这是一个常量”。

所以,如果熟悉variables声明的从右到左的阅读方向,可能会更喜欢第一个。

两者都是一样的。

const Person&x目前是最stream行的,因为英语在名词前面加了形容词,这使得它“更像英语”。

另外一种forms,Person const&x,被认为是一种较不习惯的forms。 他们的观点是,该forms总是可以从右到左进行parsing,“x是对一个const Person的引用”。 认为parsing的清晰性比惯用的结构更重要。

不幸的是对于那些人来说,他们的forms并不处理所有的事 一旦你开始看到数组和函数指针和其他奇特的forms,规则开始打破。 char * str [10]不能写成从右到左的forms,因为数组必须在右侧。 void(* signal(int,void(* fp)(int)))(int)使得从右到左的人感到痛苦。

唯一的规则已经出现,使所有types,顺时针螺旋规则的意义: http : //c-faq.com/decl/spiral.anderson.html

通常情况下,一旦有人看到顺时针旋转,一个明确的parsing规则的所有希望都会出现在窗口之外。 大多数人接受const Person&x可能是最好的方法!