const、type 和 & 在复制构造函数参数中的顺序

Order of const, type and & in copy constructor parameter

提问人:heretoinfinity 提问时间:3/30/2020 更新时间:3/30/2020 访问量:162

问:

我被告知,此处引用的 、 type 和 的顺序无关紧要。我的用户定义类型是 。const&PNG

所以我把我的复制构造函数写成:

PNG(const & PNG);

但出现错误:

error: C++ requires a type specifier for all declarations
    PNG(const & PNG);

Stackoverflow 上针对此类错误的解决方案不涉及复制构造函数,因此我决定发布一个不同的问题。

当我将其重写为时

PNG(PNG const &);

错误消失了。我错过了什么?复制构造函数是特例吗?

C++ 类型 引用 常量 复制构造函数

评论

1赞 Adrian Mole 3/30/2020
我认为,链接问题的第一条评论回答了您的问题!
0赞 StoryTeller - Unslander Monica 3/30/2020
const & PNG不是一个有效的除数器,引用限定符排在最后,你的意思是.似乎是一个很好的 ole' 错别字。const PNG&
0赞 WBuck 3/30/2020
您在第一个示例中使用了运算符,这在该上下文中没有意义。我想你的意思是address ofconst PNG&
0赞 walnut 3/30/2020
我完全看不出相关的问题与您的问题有什么关系。该问题不讨论声明中使用的说明符的顺序。相关的问题是关于声明本身的顺序。

答:

2赞 Vlad from Moscow 3/30/2020 #1

这只是一个无效的语法。删除限定符 const,您将得到

PNG( & PNG);

这没有意义。这与编写指针而不是引用相同

PNG( * PNG);

在这两种情况下,类型说明符都不存在。引用和指针应引用类型说明符。

你可以写

PNG(const PNG & );

PNG( PNG const & );

请注意,与指针相反,没有恒定的引用。例如,对于指针,您可以编写

PNG( const PNG * const );

供参考,这样的声明

PNG( const PNG & const );

无效。

根据 C++ 语法,引用是声明符的一部分。例如,您可以写

PNG( PNG const ( & ) );

因为声明符可以括在括号中。