这是不是vc.net2003的一个bug??!!实在太奇怪了
leesg 2003-09-17 03:24:45 我在vc.net2003中做了一个如下的纯虚类
class IStorageA
{
public:
...(其他纯虚函数)
virtual IStorageA& __stdcall operator>>(unsigned& u) = 0;
virtual IStorageA& __stdcall operator>>(char& ch) = 0;
virtual IStorageA& __stdcall operator>>(short& w) = 0;
virtual IStorageA& __stdcall operator>>(int& i) = 0;
virtual IStorageA& __stdcall operator>>(double& d) = 0;
virtual IStorageA& __stdcall operator>>(float& f) = 0;
virtual IStorageA& __stdcall operator>>(long& l) = 0;
virtual IStorageA& __stdcall operator>>(unsigned long& dw) = 0;
virtual IStorageA& __stdcall operator>>(unsigned short& w) = 0;
virtual IStorageA& __stdcall operator>>(unsigned char& by) = 0;
//输出
virtual IStorageA& __stdcall operator<<(unsigned u) = 0;
virtual IStorageA& __stdcall operator<<(char ch) = 0;
virtual IStorageA& __stdcall operator<<(short w) = 0;
virtual IStorageA& __stdcall operator<<(int i) = 0;
virtual IStorageA& __stdcall operator<<(double d) = 0;
virtual IStorageA& __stdcall operator<<(float f) = 0;
virtual IStorageA& __stdcall operator<<(unsigned long dw) = 0;
virtual IStorageA& __stdcall operator<<(long l) = 0;
virtual IStorageA& __stdcall operator<<(unsigned short w) = 0;
virtual IStorageA& __stdcall operator<<(unsigned char by) = 0;
...(其他纯虚函数)
};
然后从它派生了一个类CFileStorage,并实例化,结果发现在它的虚函数表中,所有流操作函数的次序都与声明的时候相反了而其他函数则是一致的,变成了如下这样
CFileStorage::operator>>(unsigned char& by)
CFileStorage::operator>>(unsigned short& w)
CFileStorage::operator>>(unsigned long& dw)
CFileStorage::operator>>(long& l)
CFileStorage::operator>>(float& f)
CFileStorage::operator>>(double& d)
CFileStorage::operator>>(int& i)
CFileStorage::operator>>(short& w)
CFileStorage::operator>>(char& ch)
CFileStorage::operator>>(unsigned& u)
CFileStorage::operator<<(unsigned char by)
CFileStorage::operator<<(unsigned short w)
CFileStorage::operator<<(long l)
CFileStorage::operator<<(unsigned long dw)
CFileStorage::operator<<(float f)
CFileStorage::operator<<(double d)
CFileStorage::operator<<(int i)
CFileStorage::operator<<(short w)
CFileStorage::operator<<(char ch)
CFileStorage::operator<<(unsigned u)
我试过了在c++Builder中与声明次序完全一致,这是不是vc .net2003的一个bug?!!