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
放在第一位。 具体而言,因为关键字最初将被称为readonly
和readonly 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可能是最好的方法!