gpt4 book ai didi

c++ - 复制构造函数调用方法

转载 作者:行者123 更新时间:2023-11-30 01:16:49 25 4
gpt4 key购买 nike

#include<iostream>
using namespace std ;
class Foo{
int a , b ;
public:
Foo(int x, int y){
a = x ;
b = y ;
}
Foo(Foo& obj){
a = obj.a ;
b = obj.b ;
}
};

int main(){
Foo obj(2,3) ;
Foo obj1(obj) ;
Foo obj2 = obj ;
}

如果我是对的,Foo obj2 = obj ;Foo obj1(obj) ; 都会调用复制构造函数。

使用其中一个的优点和缺点是什么?

最佳答案

Foo obj1(obj);是直接初始化,Foo obj2 = obj;是拷贝初始化。

这里唯一的区别是第一个可以调用显式构造函数而第二个不能。

但是,没有一个理智的人会让复制构造函数显式,所以假设您正在使用理智的代码,它应该没有什么区别。具有显式复制构造函数的类不满足 CopyConstructible 要求(许多标准容器操作需要)。函数返回和参数传递都使用复制初始化,因此具有显式复制构造函数的类在这些上下文中不可用。


只是为了让事情变得清晰。 N3936 §8.5 [dcl.init]/p15-16:

15 The initialization that occurs in the form

T x = a;

as well as in argument passing, function return, throwing an exception (15.1), handling an exception (15.3), and aggregate member initialization (8.5.1) is called copy-initialization. [ Note: Copy-initialization may invoke a move (12.8). —end note ]

16 The initialization that occurs in the forms

T x(a);
T x{a};

as well as in new expressions (5.3.4), static_cast expressions (5.2.9), functional notation type conversions (5.2.3), and base and member initializers (12.6.2) is called direct-initialization.

关于c++ - 复制构造函数调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832908/

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