c++ - 我定义了一个非拷贝构造函数;复制构造函数是否仍会被隐式定义?

标签 c++ constructor copy default copy-constructor

是否可以为已经用户定义的构造函数的调用(隐式)默认 复制构造函数 但那不是复制构造函数

如果可能的话,假设我们为类显式定义了复制构造函数,现在可以调用(隐式)默认构造函数吗?

最佳答案

首先,让我们稍微澄清一下我们的词汇。默认构造函数是 可以不带任何参数调用的构造函数。复印件 constructor 是一个可以用单个参数调用的构造函数 同类型。鉴于此,“默认复制构造函数”将是 带有类似签名的构造函数:

class MyClass
{
public:
    static MyClass ourDefaultInstance;
    //  default copy constructor...
    MyClass( MyClass const& other = ourDefaultInstance );
};

不知何故,我不认为这就是你的意思。我认为什么 你问的是隐式声明还是隐式定义 复制构造函数;一个复制构造函数,其声明或定义是 由编译器隐式提供。编译器将始终提供 声明,除非您提供的声明可以 被认为是一个复制构造函数。提供其他构造函数不会 防止编译器隐式声明复制构造函数。

这与默认构造函数不同——任何用户定义 构造函数将阻止编译器隐式声明 默认构造函数。这意味着如果您有用户定义的拷贝 构造函数,编译器不会隐式声明一个默认值 构造函数。

第二个重点是你不要调用构造函数。这 编译器在某些定义明确的上下文中调用它们:变量 主要是定义和类型转换。编译器只能调用 已声明的构造函数(包括隐含的构造函数) 声明)。因此,如果您有用户定义的构造函数(复制或 否则),并且不定义默认构造函数,编译器不能 调用构造函数,除非在它有要调用的参数的上下文中 它与。

总结一下我认为您的问题是:编译器将提供 隐式复制构造函数,即使该类有其他用户定义 构造函数,前提是这些构造函数都不能被视为拷贝 构造函数。如果您提供用户定义的复制构造函数,则 编译器将提供隐式声明的默认复制构造函数。

关于c++ - 我定义了一个非拷贝构造函数;复制构造函数是否仍会被隐式定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12577907/

相关文章:

c++ - 如何针对特定类型使用表达式模板?

c++ - 带有 LVS_OWNERDATA 标志的 ListView

java - 构造函数说明

javascript - 根据对象迭代动态获取数据库值

java - 如何复制 Java 集合列表

c++ - 使用 unique_ptr 控制文件描述符

c++ - 自动将 C/C++ 源代码划分为分布式应用程序

c# - 类型初始化异常

c# - 关于 C# 中的文件权限

python - 从类方法创建新的类实例