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?
}
};
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:我知道你没有:)。事实上,谢谢你指出这一点。正如我所看到的,否决票应该用来改进答案,我不介意,只要它们是值得的。我知道这里有人有扭曲的倾向,当我和我在同一时间看到这种倾向时,我通常会在我回答的那一刻投反对票,不管答案是否正确。对于那些用否决票作为报复手段的白痴,我只有怜悯之心。