复制ctor和copy赋值运算符const关键字位置

时间:2016-01-17 06:29:41

标签: c++

我最近注意到一些代码示例中的const关键字在中间(从可敬的博客站点)转移,如下所示:

X(X const& that) { .../... }

X& operator=(X const& other) { .../... }

这相当于这种更熟悉的语法吗?

X(const X& that) { .../... }

X& operator=(const X& other) { .../... }

以这种方式切换'const'的目的是什么?

2 个答案:

答案 0 :(得分:1)

1)放置const的位置并不重要:const int & == int const &

2)为什么?这是助记规则。

int * const - 常量指针(const 之后*)

int const * - 指向常量值的指针( int之后的const )。

所以,它的一致性。

答案 1 :(得分:0)

  

这相当于这种更熟悉的语法吗?

是的,这里的两种语法都是等价的。

X(X const& x)
X(const X& x)

这表示x别名为X类型的对象,但无法使用 x更改对象。 (如果你使用一些非const别名,指针等,它仍然可以修改。)

您应该从右向左阅读:x是类型为X的{​​{1}}对象的别名(或引用)。

我还建议您阅读C++ FAQ: Const Correctness