本文介绍了当由同一类的functionreturning对象初始化时,不会调用复制构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我对下面的一段代码感到有点困惑: ---------------------- -------------------------------------------------- ---------- #include< iostream> 使用命名空间std; class Test { public: Test(){cout<<" Cons\\\" ;;} Test(Test& a) {cout<<" copy cons\\\";} }; 测试乐趣() { 返回测试(); } int main() { cout<<""第一种初始化方式\ n" ;; 测试t1; 测试t2 = t1; cout<<" \ n第二种初始化方式\ n" ;; 测试t3 = fun(); 返回0; } OUTPUT(在CC编译器上编译时): 第一种初始方式 缺点 复制缺点 第二种初始化方式 缺点 ----------------------------- -------------------------------------------------- ----- 我很感兴趣为什么第二次初始化不会调用副本 构造函数? Aren''我们将fun()调用返回的临时对象传递给 t3进行复制吗?I am bit puzzled at the following piece of code I tried:----------------------------------------------------------------------------------#include <iostream>using namespace std;class Test {public:Test() { cout<<"Cons\n";}Test(Test& a) { cout<<"Copy cons\n";}};Test fun(){return Test();}int main(){cout<<"First way of initialization\n";Test t1;Test t2 = t1;cout<<"\nSecond way of initialization\n";Test t3 = fun();return 0;}OUTPUT (when compiled on CC compiler) :First way of initializationConsCopy consSecond way of initializationCons------------------------------------------------------------------------------------I am intrigued why second initialization doesn''t call copyconstructor ?Aren''t we passing the temporary object returned by fun() call to thet3 for copying ?推荐答案 Google forC ++ RVO - Ian Collins。Google for "C++ RVO"--Ian Collins. 这不是复制构造函数的正确语法。应该是这样的: 测试(const测试& a)This is not the right syntax for copy constructor. It should be like:Test(const Test& a) #include#include 这不是复制构造函数的正确语法。应该是这样的: 测试(const测试& a)This is not the right syntax for copy constructor. It should be like:Test(const Test& a) 虽然有副本是不寻常的通过非const引用获取其参数 的构造函数,它仍然是一个复制构造函数。 - Pete Roundhouse Consulting,Ltd。( www.versatilecoding.com )作者 标准C ++库扩展:教程和参考 www.petebecker.com/tr1book )While it''s unusual to have a copy constructor that takes its argumentby non-const reference, it is, nonetheless, a copy constructor.--PeteRoundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "TheStandard C++ Library Extensions: a Tutorial and Reference(www.petebecker.com/tr1book) 这篇关于当由同一类的functionreturning对象初始化时,不会调用复制构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-23 20:03