sou*_*912 33 c++ constructor default copy copy-constructor
可以为已经有用户定义的构造函数但不是复制构造函数的类调用(隐式)默认 复制构造函数吗?
如果可能的话,假设我们明确定义了类的复制构造函数,现在可以调用(隐式)默认构造函数吗?
Jam*_*nze 92
首先,让我们澄清一下我们的词汇量.默认构造函数是一个可以在没有任何参数的情况下调用的构造函数.复制构造函数是一个构造函数,可以使用相同类型的单个参数进行调用.鉴于此,"默认复制构造函数"将是具有以下签名的构造函数:
class MyClass
{
public:
static MyClass ourDefaultInstance;
// default copy constructor...
MyClass( MyClass const& other = ourDefaultInstance );
};
Run Code Online (Sandbox Code Playgroud)
不知何故,我不认为这就是你的意思.我认为你所询问的是隐式声明或隐式定义的复制构造函数; 复制构造函数,其声明或定义由编译器隐式提供.除非您提供可被视为复制构造函数的声明,否则编译器将始终提供声明.提供其他构造函数不会阻止编译器隐式声明复制构造函数.
这与默认构造函数不同 - 任何用户定义的构造函数都将阻止编译器隐式声明默认构造函数.这意味着如果您有用户定义的复制构造函数,编译器将不会隐式声明默认构造函数.
第二个重点是你不要调用构造函数.编译器主要在某些定义良好的上下文中调用它们:变量定义和类型转换.编译器只能调用声明的构造函数(包括那些隐式声明的构造函数).因此,如果您有用户定义的构造函数(复制或其他),并且没有定义默认构造函数,则编译器不能调用构造函数,除非在具有调用它的参数的上下文中.
总结一下我认为您的问题是什么:即使该类具有其他用户定义的构造函数,编译器也将提供隐式复制构造函数,前提是这些构造函数都不能被视为复制构造函数.如果您提供用户定义的复制构造函数,则编译器将不提供隐式声明的默认复制构造函数.
Cra*_*sta 11
http://www.cplusplus.com/articles/y8hv0pDG/
如果尚未定义,则存在默认的复制构造函数.因此,如果您尚未定义复制构造函数,则可以调用默认复制构造函数,但是如果您在类中定义了复制构造函数,则无法调用默认复制构造函数.
| 归档时间: |
|
| 查看次数: |
65184 次 |
| 最近记录: |