常量参考参数常量参考参数

下列声明之间有区别吗?

void somefunc(const Person &p);
void somefunc(Person const &p);
43922 次浏览

没什么区别const绑定到其左侧的类型... ... 除非它是声明的第一部分,在这种情况下它绑定到右侧。

见: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt

就我个人而言,我发现 const T &x读起来更好。根据 这个,比亚内也喜欢把 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 是函数式的 但是, 真正的问题是哪个应该是 用过。

阅读文章的其余部分以获得更多信息。但本质上,它说它们是等价的,你可以使用任何一个,因为你认为合适。但是,您应该选择一个并坚持下去,以避免将来的混乱。

有的! 第一个更易读:)

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

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

这听起来比“ const Person & x”好,后者是“ x 是对 Person 的引用,后者是常量”

因此,如果您熟悉变量声明从右向左的读取方向,那么您可能更喜欢第一个。

两者都是一样的。

Const Person & x 是目前最流行的,因为英语把形容词放在名词前面,这使得它“更像英语”

另一种形式 Person const & x 被认为是一种不那么惯用的形式。他们的论点是,该表单总是可以从右到左进行解析,“ x 是对常量 Person 的引用。”理由是,语法分析的清晰度比惯用结构更重要。

不幸的是,这些人,他们的形式并不能处理一切。一旦您开始看到数组和函数指针以及其他奇特的形式,规则就开始崩溃。Char * str [10]不能从右到左写,因为数组必须在右边。Void (* sign (int,void (* fp)(int))(int)使得从右到左的人在痛苦中畏缩。

只有顺时针螺旋规则(Clockwise Spiral rule)能够解释所有类型: http://c-faq.com/decl/spiral.anderson.html

通常情况下,一旦有人看到顺时针螺旋,所有希望一个明确的解析规则的窗口。大多数人接受这个常量 Person & x 可能是最好的方法!