gpt4 book ai didi

c++ - 在 C++ 中,当函数按值返回对象时,在调用点应该调用复制构造函数

转载 作者:行者123 更新时间:2023-11-30 05:08:40 25 4
gpt4 key购买 nike

<分区>

我正在执行以下代码 C++ 代码

(Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

class x {
public :
int data ;
x(int v) {cout<<"1 args constr\n" ; data = v ;}
x(const x& o) {cout<<"copy constr\n" ;}
x &operator=(const x&o) {cout<<"assignment opr\n" ;}
~x() {cout<<"destr\n" ;}
} ;

x fun() {
cout<<"in func\n" ; //#1
x o(-19) ; //#2
cout<<"returning...\n";
return o ; //#3
}

main() {
x ob = fun() ; //#4
cout<<ob.data<<endl ;
}

并获得以下输出: 在函数中 1 个参数构造函数 返回... -19 销毁

我无法理解的是:

  1. 为什么构造函数和析构函数只调用一次
  2. 为什么在按值返回时没有调用复制构造函数

据我了解,ob 是在main 的范围内创建的。因此,ob 的构造函数和析构函数应该在 main 的范围内调用。同样,o 是在 fun 的范围内创建的。因此,在 fun

的范围内,对于 o 应该有一个构造函数和析构函数调用

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