Sign-up....

同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

class inter

{

public:

inter(int i):_value(i)

{

cout<<"inter(i)"<<endl;

}

inter(const inter &ri):_value(ri._value){cout<<"inter(const inter &)"<<endl;}

private:

int _value;

};

void clac(inter)

{

cout<<"clac(int) "<<endl;

}

int main()

{

int a;

clac(a); //

system("pause");

return 0;

}

在C++ PRIMER中写道:

clac(a)的C++伪码如下:

{

inter temp=inter(a); //那么这里temp的拷贝构造函数的调用怎么没有显示出来..

calc(temp); //这里也应该有一拷贝构造函数的调用也没有显示出来..??

}

-------------------

DEV-C++ 编译

[480 byte] By [msdn] at [2007-11-17 11:06:00]
# 1 Re: 同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

mark

学习一下

OpenHero at 2005-7-13 9:07:28 >
# 2 Re: 同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

不知楼主的版本是否过低,我用VC6和dev-c++都通过了,没问题.

正常显示出

inter(i)

zhouhuahai at 2005-7-13 9:22:36 >
# 3 Re: 同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

VC6:sp6 下正常显示!

the777 at 2005-7-13 9:31:14 >
# 4 Re: 同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

结果如下:

inter(i)

clac(int)

但是

clac(a)的C++伪码如下:

{

inter temp=inter(a); //那么这里temp的拷贝构造函数的调用怎么没有显示出来..

calc(temp); //这里也应该有一拷贝构造函数的调用也没有显示出来..??

}

两个拷贝构造函数的调用呢.怎么没有显示呢?

R9R9R9 at 2005-7-13 11:27:48 >
# 5 Re: 同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

to:andy_bin(乐逍遥)

lac(a)的C++伪码如下:

{

inter temp=inter(a); //这里inter(a)调用了一个构造函数..显示了inter(i);那然后inter temp用这个对像初始化.应该调用了一个拷贝构造函数..这个为什么没有显示出来

calc(temp); //这里的calc(inter)参数是传值调用.也应该有一个拷贝构造函数的调用.怎么也没有显示出来...哪里有不对的请指正...

}

R9R9R9 at 2005-7-13 12:07:07 >
# 6 Re: 同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

TO:foochow(恰似你的温柔)

书中写明clac(a)的C++伪码如下:

{

inter temp=inter(a); //那么这里temp的拷贝构造函数的调用怎么没有显示出来..

calc(temp); //这里也应该有一拷贝构造函数的调用也没有显示出来..??

}

这只是伪码啊..实际我们只是调用了

void clac(inter)

{

cout<<"clac(int) "<<endl;

}

这个函数..并没有调用了其他的东西..按理说.正常的显示应该像你上面写的那样吧..

R9R9R9 at 2005-7-13 16:46:59 >
# 7 Re: 同志们...深更半夜了.进来帮个忙..有关用户自定义转换的问题..

嗯...有同志说是编译器的优化...

这代码在c++ primer的640页...用构造函数作为转换函数...结贴了

R9R9R9 at 2005-7-13 19:51:27 >

C/C++

All Classified