读书人

C++对无名对象申明有关问题

发布时间: 2012-04-03 12:38:19 作者: rapoo

C++对无名对象申明问题
学习C++转换运算符函数重载时碰到一个问题,就是网上一搜一堆的管宁的转换运算符函数重载代码

C/C++ code
#include <iostream>    using namespace std;        class Test      {          public:          Test(int a = 0)          {              cout<<this<<":"<<"载入构造函数!"<<a<<endl;              Test::a = a;          }          Test(Test &temp)          {              cout<<"载入拷贝构造函数!"<<endl;              Test::a = temp.a;          }          ~Test()          {              cout<<this<<":"<<"载入析构函数!"<<this->a<<endl;              cin.get();          }          operator int()//转换运算符,去掉则不会调用          {              cout<<this<<":"<<"载入转换运算符函数的内存地址:"<<this->a<<endl;              return Test::a;          }      public:      int a;  };  int main()  {      Test b=Test(99);//注意这里      cout<<"b的内存地址"<<&b<<endl;      cout<<b.a<<endl;      system("pause");  } 

这段代码我在调试过程中并没发现如作者所说的临时对象,如下图所示:


是因为C++类库进行调整造成的吗?
初学C++一月多,很多问题不懂!

[解决办法]
我觉得是在=的时候调用的copy constructor,产生临时对象
抄错了吧,怎么有两个public:
[解决办法]
编译器优化掉了。
[解决办法]
Test(int a = 0)和operator int()的调用形式是一样的,存在二义性.explicit Test(int a = 0)这样就不会调用 operator int()了,不过仍然不会产生临时对象。在这里也确实没有产生临时对象的必要性,VC把子Test b=Test(99)当成Test b(99)处理了。
[解决办法]
帮顶。

读书人网 >C++

热点推荐