Temporary Variable in C++

来源:互联网 发布:重庆大学网络自助 编辑:程序博客网 时间:2024/06/04 18:27

#include "TestTempVar.h"#include <iostream>using namespace std;namespace {struct TempClass{TempClass() : privateCount(count) { ++count; cout << "TempClass " << privateCount <<" ctor" << endl;  }~TempClass() { cout << "TempClass " << privateCount << " dtor" << endl; }TempClass(const TempClass& t){privateCount = count++;cout << "TempClass " << privateCount << " copy ctor" << endl;}TempClass& operator= (TempClass& t){ if (&t != this) {privateCount = count++;}cout << "TempClass " << privateCount << " operator=" << endl;return *this;}private:static int count;int privateCount;};int TempClass::count = 1;void testInput(TempClass& t){cout << "testInput begin" << endl;cout << "testInput return" << endl;}TempClass testReturn(){cout << "testReturn return" << endl;return TempClass();}TempClass& testReturnRef(){cout << "testReturn return" << endl;return TempClass();}}void testTemporaryVariable(){cout << "TempClass();" << endl;TempClass(); cout << "TempClass(); done" << endl << endl;cout << "TempClass& t = TempClass();" << endl;TempClass& t = TempClass();cout << "TempClass& t = TempClass(); done" << endl << endl;cout << "testInput(TempClass());" << endl;testInput(TempClass());cout << "testInput(TempClass()); done" << endl << endl;cout << "TempClass result = testReturn();" << endl;TempClass result = testReturn();cout << "TempClass result = testReturn(); done" << endl << endl;cout << "TempClass& refResult = testReturn();" << endl;TempClass& refResult = testReturn();cout << "TempClass& refResult = testReturn(); done" << endl << endl;cout << "TempClass& refResult2 = testReturnRef();" << endl;TempClass& refResult2 = testReturnRef();cout << "TempClass& refResult2 = testReturnRef(); done" << endl << endl;}

直接上代码和输出,大家就明白其中的原理了。



输出:

TempClass();TempClass 1 ctorTempClass 1 dtorTempClass(); doneTempClass& t = TempClass();TempClass 2 ctorTempClass& t = TempClass(); donetestInput(TempClass());TempClass 3 ctortestInput begintestInput returnTempClass 3 dtortestInput(TempClass()); doneTempClass result = testReturn();testReturn returnTempClass 4 ctorTempClass result = testReturn(); doneTempClass& refResult = testReturn();testReturn returnTempClass 5 ctorTempClass& refResult = testReturn(); doneTempClass& refResult2 = testReturnRef();testReturn returnTempClass 6 ctorTempClass 6 dtorTempClass& refResult2 = testReturnRef(); doneTempClass 5 dtorTempClass 4 dtorTempClass 2 dtor


原创粉丝点击