![]() |
1
12
在复制构造函数中有两个值得怀疑的地方。 首先,您已经将复制构造函数显式化了(这是一件值得怀疑的事情),因此(理论上)您需要这样做:
其次,复制构造函数接受引用,而不是
就我个人而言,我只是把
请注意
[注:以下两者之间可能存在差异:
和
但在这种情况下,您有一个用户声明的默认构造函数,因此这不适用。]
编辑:
[*]我已经仔细检查过了,12.3.1[class.conv.ctor]说您可以创建一个默认的构造函数
|
![]() |
2
5
您不希望将这些构造函数中的任何一个标记为显式的-编译器需要隐式地使用这两个构造函数,尤其是复制构造函数。你试图通过明确地标记它们来实现什么? |
![]() |
3
4
首先,默认构造函数和复制构造函数都不应该是
其次,确保复制构造函数接受
第三,
第四,如果您已经编写了自己的复制构造函数,那么您还应该编写赋值运算符。
|
![]() |
4
3
尝试不使用显式?我认为:
创建隐式复制,因此不会触发显式复制构造函数。 编辑: 这只是答案的一半。参见查尔斯·贝利或叔叔邮报,了解为什么需要警察。 |
![]() |
5
3
复制构造函数不应该是 明确的 (这使得它在这里以及在许多其他完全合理的上下文中都不可计算,例如当按价值传递或返回时)。 下一步,它应该通过 康斯特 引用,否则它不能绑定到临时对象。
此外,没有理由设置默认的构造函数 明确的 :此关键字只对只能用一个参数调用的构造函数(复制构造函数除外)有意义,在这种情况下,它会阻止通过该构造函数将其他类型隐式转换为foo。例如,如果一个构造函数 int 是 明确的 ,这样的情况无法编译:
总而言之:
而且,如果这两个构造函数都不打算做任何事情,那么根本不需要定义它们——编译器将自动提供它们(但是,如果定义任何其他构造函数,则不会自动生成默认的构造函数)。 |
![]() |
6
2
应该是
第一行创建一个foo实例,然后复制到d; |
![]() |
7
2
你的问题在实例化中。你不需要
保持类相同,但尝试此方法进行实例化:
事实上,你甚至不需要
|
![]() |
8
1
编译器告诉你…使用此:
|
![]() |
9
0
你可以用两种方法来解决这个问题。其中一个(已由伦道夫建议)是消除使用复制系数。另一种方法是写一个适当的复制系数:
你通常都想这样做。 编辑:看看它,我最后的评论很容易被误解。相当多的课程 不 完全需要一个拷贝连接器,但是 如果 您确实需要一个复制ctor,它通常应该具有上面的形式(不是显式的,并且以一个常量引用作为参数)。 |
![]() |
10
-1
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |