gpt4 book ai didi

C++ 复制构造函数签名 : does it matter

转载 作者:可可西里 更新时间:2023-11-01 18:41:21 25 4
gpt4 key购买 nike

我当前的实现使用大量具有这种语法的复制构造函数

MyClass::Myclass(Myclass* my_class)

它真的(功能上)不同于

MyClass::MyClass(const MyClass& my_class)

为什么?

我被告知第一个解决方案不是真正的复制构造函数。但是,进行更改意味着需要进行大量重构。

谢谢!!!

最佳答案

它的不同之处在于第一个不是复制构造函数,而是转换构造函数。它将 MyClass* 转换为 MyClass

根据定义,复制构造函数具有以下签名之一:

MyClass(MyClass& my_class)
MyClass(const MyClass& my_class)
//....
//combination of cv-qualifiers and other arguments that have default values

12.8。复制类对象

2) A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments (8.3.6).113) [ Example: X::X(const X&) and X::X(X&,int=1) are copy constructors.

编辑:您似乎混淆了两者。

假设你有:

struct A
{
A();
A(A* other);
A(const A& other);
};

A a; //uses default constructor
A b(a); //uses copy constructor
A c(&a); //uses conversion constructor

它们共同服务于不同的目的。

关于C++ 复制构造函数签名 : does it matter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com