Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Oops概念-获得意外结果_C++_Oop_Constructor_Copy Constructor - Fatal编程技术网

C++ Oops概念-获得意外结果

C++ Oops概念-获得意外结果,c++,oop,constructor,copy-constructor,C++,Oop,Constructor,Copy Constructor,上述程序的输出为->创建 为什么构造函数只调用了两次 我认为输出应该是->创建 在您的主页中: t1未显式初始化,因此它使用默认构造函数打印一个create t2由fun的返回值显式初始化,语句的testt2部分只是变量的声明 在fun内部,局部变量t没有显式初始化,因此默认构造函数称为Printing second create,我不希望创建,而是创建副本而不删除副本 第一个创建在main中是t1。 第二个创造是有趣的。 第一个副本是不被复制到返回的乐趣。 第二个副本是复制到main中t2的f

上述程序的输出为->创建

为什么构造函数只调用了两次

我认为输出应该是->创建

在您的主页中:

t1未显式初始化,因此它使用默认构造函数打印一个create

t2由fun的返回值显式初始化,语句的testt2部分只是变量的声明

在fun内部,局部变量t没有显式初始化,因此默认构造函数称为Printing second create,我不希望创建,而是创建副本而不删除副本

第一个创建在main中是t1。 第二个创造是有趣的。 第一个副本是不被复制到返回的乐趣。 第二个副本是复制到main中t2的fun的返回值。
您可以在使用和不使用-fno-elide构造函数的情况下看到这一点。

除了上面的评论之外,您可能还想看看。@BiagioFesta谢谢
#include<iostream>
using namespace std;

class Test
{
   /* Class data members */
public:
   Test(const Test &t) { /* Copy data members from t*/ cout<<"copy\n";}
   Test()        { /* Initialize data members */ cout<<"create ";}
};

Test fun()
{
    Test t;
    return t;
}

int main()
{
    Test t1;
    Test t2 = fun();
    return 0;
}