string a="123456";到底调用了几个构造函数?

[复制链接]
查看11 | 回复4 | 2013-8-6 15:59:37 | 显示全部楼层 |阅读模式
myClassA temp=4;这一句是在对象声明的时候就“赋值”,这时编译器会直接匹配最佳的类型转换构造函数(也就是单参数的构造函数),又右值的类型是int,正好与myClassA::myClassA(int)匹配成功。这个解释我记得是在C++ Primer Plus上看到的。myClassAtemp(myClassA (4));经实验,这句话只会调用int类型参数的构造函数。我们有理由认为是编译器优化了:因为中间构造的临时变量,到后来其实并不会存在,因此编译器没理由浪费一次复制操作。而且下面更进一步的实验更有力地证明了这个结论:#include using namespace std;//myclass.h//#pra...
回复

使用道具 举报

千问 | 2013-8-6 15:59:37 | 显示全部楼层
myClassA(const myClassA&);注意你这个复制构造函数,用了地址引用,而代码中myClassA (4)是类名调用,并不产生一个实际的变量,如果你再声明一个myClassA temp2(temp);复制构造函数就生效了。一般来说,对类进行operator=,应该重载运算符,如果不重载,会产生很多的不可预知性。书上说的,应该是具有...
回复

使用道具 举报

千问 | 2013-8-6 15:59:37 | 显示全部楼层
class RString {public: RString (const char *str=NULL); //构造函数
RString (const RString &);
//拷贝构造函数
~RString (void);
//析构函数
RString& operator= (const RString ...
回复

使用道具 举报

千问 | 2013-8-6 15:59:37 | 显示全部楼层
个人感觉myClassA temp=4;这个只是初始化吧,你如果试试myClassA temp1 = 4;myClassA temp = temp1;最后结果就是调用带参数的构造函数和调用复制构造函数,myClassA temp = temp1;这句话是调用复制构造函数试了半天,myClassA temp(myClassA (4));确实不调用复制构造...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行