【问题标题】:Is this considered as a copy constructor?这是否被视为复制构造函数?
【发布时间】:2014-09-27 06:20:17
【问题描述】:

我知道复制构造函数是将新对象作为现有对象的副本的构造函数,但是,每个将另一个对象作为参数的构造函数都称为复制构造函数吗?

示例:如果我必须对 XY 进行类,X(const Y& y) 是一个复制构造函数吗?

如果没有这样的构造函数有名字吗?

【问题讨论】:

  • 你在说什么语言?
  • 这取决于语言;大多数语言(如果不是全部)实际上并不要求您使用作为参数传递的对象来初始化新对象。
  • 这是一个转换构造函数。
  • 复制构造函数应该引用与参数相同类型的对象。引用可以是 const 或非常量...
  • 相关说明:如果你有一个类似的构造函数,编译器可以使用它来隐式地将 Y 类型的对象转换为 X 类型的对象。如果这是不希望的行为,它可以是通过在构造函数之前放置关键字'explicit'来删除。这样做通常被认为是“良好的形式”:)

标签: c++ oop copy-constructor


【解决方案1】:

没有这个

X(const Y& y);

不是复制构造函数。复制构造函数应定义与创建的对象具有相同类型(带/不带限定符)的第一个参数

根据 C++ 标准

2 类 X 的非模板构造函数是一个复制构造函数,如果它 第一个参数的类型为 X&、const X&、volatile X& 或 const volatile X&,或者没有其他参数,或者其他所有参数 参数有默认参数

构造函数

X(const Y& y);

是一个转换构造函数,将 Y 类型的对象转换为 X 类型的对象。

【讨论】:

    【解决方案2】:

    如果XY是不同的类型,那么

    X(const Y& y)
    

    将是一个 conversion 构造函数。

    注意 copy 构造函数被认为是 conversion 构造函数的一个特例(对于X==Y)。

    【讨论】:

      【解决方案3】:

      没有。复制构造函数是一个将同一类的单个实例作为它的 ctor 的构造函数。因此

       X(const X& x)
      

      是一个复制构造函数,如下所示:

       X(const X& x, int z = 0)
      

      因为它可以只用一个 x 对象来调用。

      采用其他对象的构造函数通常称为“转换构造函数”,但该名称与“复制构造函数”一样固定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-12
        相关资源
        最近更新 更多