【问题标题】:Copy constructor for c++c++的复制构造函数
【发布时间】:2015-02-07 15:40:54
【问题描述】:

我有以下 c++ 代码:

    class test1{};      
    class test2{ test2();};
    class test3{ test3(int); };

    test1 t1(test1());  //compile ok
    test1 t2(test2());  //compile ok
    test1 t3(test3(int())); //compile ok
    test1 t4(test3(10));    
    //compile error: no known conversion for argument 1 from 'test3' to 'const test1&'

为什么?

【问题讨论】:

  • 您没有为 test1 创建一个将 test3 对象作为参数的构造函数。你期待什么? (如果你指的是test1 t2(test2());,这很可能是 MVP)
  • t4不能构造是有道理的,但是为什么t3可以构造呢? t3和t4有区别吗?
  • 是有区别的,t2和t3是函数声明,不是变量定义,顺便说一下t1也是。

标签: c++ constructor copy-constructor


【解决方案1】:

你所说的编译好实际上并没有做你想要的,它声明了一个函数,它没有定义一个变量。这是 Borgleader 所指的“最令人烦恼的 Parse”或 MVP。

尝试使用以下内容进行编译,这实际上是您的意思,您会看到它失败了:

test1 t2( (test2()) );

您需要定义这些复制构造函数才能使用它们。 test2 不是从 test1 派生的,因此它不能使用继承,并且没有神奇的类型转换可以为您修复它。

【讨论】:

  • @Borgleader 感谢您的编辑,当编辑通知出现时,我自己才注意到;)
猜你喜欢
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2018-03-12
相关资源
最近更新 更多