C++ 在C++;,采用基类的构造函数是否算作复制构造函数?

C++ 在C++;,采用基类的构造函数是否算作复制构造函数?,c++,inheritance,copy-constructor,copy-assignment,C++,Inheritance,Copy Constructor,Copy Assignment,例如: class Derived : public Base { Derived(const Base &rhs) { // Is this a copy constructor? } const Derived &operator=(const Base &rhs) { // Is this a copy assignment operator? } }; 显示的构造函数是否算作副本构造

例如:

class Derived : public Base
{
    Derived(const Base &rhs)
    {
        // Is this a copy constructor?
    }
    const Derived &operator=(const Base &rhs)
    {
        // Is this a copy assignment operator?
    }
};
  • 显示的构造函数是否算作副本构造函数
  • 显示的赋值运算符是否算作复制赋值运算符
  • 显示的构造函数是否算作副本构造函数?

    不可以。它不算作复制构造函数 它只是一个转换构造函数,而不是复制构造函数

    C++03标准复制类对象 第2段:

    如果类
    X
    的非模板构造函数的第一个参数类型为
    X&
    const X&
    volatile X&
    const volatile X&
    ,并且没有其他参数,或者所有其他参数都有默认参数,则该类的非模板构造函数是副本构造函数


    显示的赋值运算符是否算作复制赋值运算符?

    In conversion constructor
    In doSomething
    In operator=
    
    不,没有

    C++03标准12.8复制类对象 第9段:

    In conversion constructor
    In doSomething
    In operator=
    
    用户声明的复制赋值运算符
    X::operator=
    是类
    X
    的非静态非模板成员函数,只有一个参数类型为
    X
    X&
    常量X&
    volatile X&
    常量volatile X&


    #include<iostream>
    class Base{};
    class Derived : public Base
    {
       public:
        Derived(){}
        Derived(const Base &rhs)
        {
           std::cout<<"\n In conversion constructor";
        }
        const Derived &operator=(const Base &rhs)
        {
            std::cout<<"\n In operator=";
            return *this;
        }
    };
    
    void doSomething(Derived obj)
    {
        std::cout<<"\n In doSomething";
    }
    int main()
    {
        Base obj1;
        doSomething(obj1);
    
    
        Derived obj2;
        obj2 = obj1;    
        return 0;
    }
    

    标准中对复制ctor的引用不完整,在这种情况下,OP可能会得到错误的印象。“全文”是(来自C++11):如果类X的非模板构造函数的第一个参数是类型X&、常量X&、volatile X&或const volatile X&,并且没有其他参数,或者所有其他参数都有默认参数,则该类X的非模板构造函数是一个副本构造函数。@DanielFrey:似乎是正确的。当然,
    const
    volatile
    一起作为cv限定符。无论你在哪里使用,你都可以使用。作为记录,因为我似乎回答了前面的评论:我从未否决过你,我的评论独立于其他人的评论。像这样的小事不值得投反对票。@DanielFrey:我知道你没有:)。事实上,谢谢你指出这一点。正如我所看到的,否决票应该用来改进答案,我不介意,只要它们是值得的。我知道这里有人有扭曲的倾向,当我和我在同一时间看到这种倾向时,我通常会在我回答的那一刻投反对票,不管答案是否正确。对于那些用否决票作为报复手段的白痴,我只有怜悯之心。