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