下列声明之间有区别吗?
void somefunc(const Person &p); void somefunc(Person const &p);
有 没什么区别。const绑定到其左侧的类型... ... 除非它是声明的第一部分,在这种情况下它绑定到右侧。
const
见: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt
就我个人而言,我发现 const T &x读起来更好。根据 这个,比亚内也喜欢把 const放在第一位。特别是因为关键字最初将被称为 readonly,而 readonly int x读起来更好: -P。
const T &x
readonly
readonly int x
看这个 翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳翻译: 奇芳 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 是函数式的 但是, 真正的问题是哪个应该是 用过。
[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 的引用”
Person const & x
这听起来比“ const Person & x”好,后者是“ x 是对 Person 的引用,后者是常量”
const Person & x
因此,如果您熟悉变量声明从右向左的读取方向,那么您可能更喜欢第一个。
两者都是一样的。
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 可能是最好的方法!