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

Copy ctor and copy assignment operator const keyword position

本文关键字:复制 关键字 位置 const 赋值运算符 ctor      更新时间:2023-10-16

我最近注意到一些代码示例中的 const 关键字在中间移动(来自受人尊敬的博客网站),如下所示:

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

这是否等同于这种更熟悉的语法?

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

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

1)把const放在哪里并不重要:const int & == int const &

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

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

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

所以,它是为了一致性。

这是否等同于这种更熟悉的语法?

是的

,这里的两种语法是等效的。

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

这表示x为类型为 X 的对象提供别名,但不能使用 x 更改该对象。(如果使用一些非const别名、指针等,仍然可以修改它。

您应该从右到左阅读它:x是对constX 类型的对象的别名(或引用)。

我还建议您阅读C++常见问题解答:常量正确性