复制构造函数参数

发布于 2025-01-01 06:43:27 字数 393 浏览 0 评论 0原文

在复制构造函数中,为什么参数需要具有与其关联的默认值? 如果没有与它们关联的默认值并且构造函数中提供了多个参数,会发生什么情况?

例如:

X(const X& copy_from_me, int = 10);

具有 int 的默认值,但 this:

X(const X& copy_from_me, int);

没有。第二种情况会发生什么?

http://en.wikipedia.org/wiki/Copy_constructor

In a copy constructor why do arguments need to have default values associated with them?
What happens if there are no default values associated with them and more than one argument is provided in the constructor?

For example:

X(const X& copy_from_me, int = 10);

has a default value for the int, but this:

X(const X& copy_from_me, int);

does not. What happens in this second case?

http://en.wikipedia.org/wiki/Copy_constructor

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

凉宸 2025-01-08 06:43:27

复制构造函数始终采用一个参数,即对其所属类型的引用,可能还有其他参数,但它们必须具有默认值。

复制构造函数被称为复制函数,复制构造函数的目的是通过使用相同类型的对象作为创建新类型的基础来创建该类型的对象。

标准指定复制构造函数的类型为:

T(const &T obj);

这基本上允许在按值调用函数或按值返回该类型的对象期间创建临时对象。
此语法有助于创建新对象,因为:

T obj1(obj2);      <--------- Direct Initialization
T obj1 = obj2;     <--------- Copy Initialization

如果不强制传递给复制构造函数的附加参数具有默认值,则不可能使用上述语法构造对象。
因此严格的条件,
复制构造函数可能还有其他参数,但它们必须具有默认值。

A copy constructor always takes one parameter, reference to the type for which it belongs, there maybe other parameters but they must have default values.

An copy constructor is called as an copying function and the purpose of the copy constructor is to create an object of a type by using an object of the same type as basis for creation of the new type.

The Standard specify's that the copy constructor be of the type:

T(const &T obj);

This basically allows creation of temporary objects during calling functions by value or returning objects of the type by value.
This syntax facilitates creation of an new object as:

T obj1(obj2);      <--------- Direct Initialization
T obj1 = obj2;     <--------- Copy Initialization

If the additional arguments being passed to the copy constructor would not be mandated to have default values then the construction of objects using the above syntax would not be possible.
Hence the strict condition,
there maybe other parameters to a copy constructor but they must have default values.

娇女薄笑 2025-01-08 06:43:27

当调用复制构造函数时,唯一保证可用的是对同一类的实例的引用。如果复制构造函数采用超出此所需引用的参数,则这些参数必须具有默认值。

假设我们有一个具有以下签名的构造函数:

 X(const X&, int);

由于第二个参数,这不能用作复制构造函数。例如:

 X x1;
 X x2(x1);

编译器将如何使用上面的 x2 构造函数?不可以。

另一方面,以下可以用作复制构造函数:

 X(const X&, int = 0);

When a copy constructor is invoked, the only thing that's guaranteed to be available is a reference to an instance of the same class. If the copy constructor takes arguments beyond this required reference, those arguments must have default values.

Let's say we have a constructor with the following signature:

 X(const X&, int);

This cannot be used as a copy constructor because of the second argument. For example:

 X x1;
 X x2(x1);

How would the compiler use the above constructor for x2? It can't.

On the other hand, the following can be used as a copy constructor:

 X(const X&, int = 0);
折戟 2025-01-08 06:43:27

复制构造函数有一个参数,该参数是对所复制类型的引用。

可以有额外的参数,如果这些参数有默认值。如果它们没有默认值,那么它就不是复制构造函数。

A copy constructor has one parameter that is a reference to the type that is copied.

It can have additional parameters, if these have default values. If they don't have default values, it just isn't a copy constructor.

圈圈圆圆圈圈 2025-01-08 06:43:27

复制构造函数必须只能使用要复制类型的对象来调用:

Thing t1;     // default constructor
Thing t2(t1); // copy constructor

如果存在没有默认值的额外参数,则不能像这样调用构造函数,因此它不是复制构造函数。

A copy constructor has to be callable with just an object of the type to be copied:

Thing t1;     // default constructor
Thing t2(t1); // copy constructor

If there are extra arguments without default values, then the constructor can't be called like that, so it isn't a copy constructor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文