以下声明之间有区别吗?
void somefunc(const Person &p);
void somefunc(Person const &p);
Answers:
有没有什么区别。const绑定到类型的左侧...除非它是声明的第一部分,在这种情况下,它绑定到右侧。
请参阅: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在功能上等同于const Fred&x。但是,真正的问题是应该使用哪个。
阅读本文的其余部分以获取更多信息。但从本质上讲,它说它们是等效的,您可以根据需要使用其中之一。但是,您应该选择一个并坚持下去,以免将来造成混乱。
这真的是一个品味问题。
如果从右到左Person const & x读取,则“ ”表示“ x是对常量Person的引用”。
听起来比“const Person & x ”,后者将是“ x是对Person的引用,它是恒定的”。
因此,如果熟悉变量声明的从右到左读取方向,则可能更喜欢第一个。
两者是相同的。
const Person&x当前是最受欢迎的,因为英语将形容词放在名词之前,这使它“更像英语”。
建议使用其他形式,即Person const&x,这是一种不太惯用的形式。他们的论点是,该格式始终可以从右到左进行解析,“ x是对const Person的引用”。有观点认为解析的清晰性比惯用的结构更重要。
对于这些人来说不幸的是,他们的形式不能处理所有事情。一旦开始看到数组和函数指针以及其他奇特形式,规则就会开始崩溃。char * str [10]不能以从右到左的形式编写,因为数组必须在右侧。void(* signal(int,void(* fp)(int)))(int)使左派人士感到痛苦。
唯一的规则已经出现,可以理解所有类型,顺时针旋转规则:http : //c-faq.com/decl/spiral.anderson.html
通常,一旦有人看到顺时针旋转,清晰的解析规则的所有希望就荡然无存了。然后,大多数人都接受const Person&x可能是最好的选择!