问一个关于模板实例化的有关问题
问一个关于模板实例化的问题。
#include <iostream>
#include <typeinfo>
using namespace std;
template <class T>
class A
{
typedef T& reference;
typedef T* pointer;
};
template <class T>
class B
{
typename T::reference type;
typename T::pointer ptype;
};
int main()
{
cout < <sizeof(A <int> ) < <sizeof(A <double> ) < <endl;//为什么都是1,
cout < <sizeof(B <int> ) < <sizeof(B <double> ) < <endl;//这句为什么编译不过去
//cout < <sizeof(B <A <int> > ) < <sizeof(B(A <int> )) < <endl;
return 0;
}
------解决方案--------------------
问题1,空类大小至少为1,这是规定。具体可看effective C++、深度探索C++对象模型等书
问题2,int没提供int::reference,当然编译不过。
------解决方案--------------------
cout < <sizeof(A <int> ) < <sizeof(A <double> ) < <endl;//为什么都是1,
==============================
空类尺寸为1
------解决方案--------------------
cout < <sizeof(B <int> ) < <sizeof(B <double> ) < <endl;//这句为什么编译不过去
==================================
实例化,会double::reference类型,所以编译错的
#include <iostream>
#include <typeinfo>
using namespace std;
template <class T>
class A
{
typedef T& reference;
typedef T* pointer;
};
template <class T>
class B
{
typename T::reference type;
typename T::pointer ptype;
};
int main()
{
cout < <sizeof(A <int> ) < <sizeof(A <double> ) < <endl;//为什么都是1,
cout < <sizeof(B <int> ) < <sizeof(B <double> ) < <endl;//这句为什么编译不过去
//cout < <sizeof(B <A <int> > ) < <sizeof(B(A <int> )) < <endl;
return 0;
}
------解决方案--------------------
问题1,空类大小至少为1,这是规定。具体可看effective C++、深度探索C++对象模型等书
问题2,int没提供int::reference,当然编译不过。
------解决方案--------------------
cout < <sizeof(A <int> ) < <sizeof(A <double> ) < <endl;//为什么都是1,
==============================
空类尺寸为1
------解决方案--------------------
cout < <sizeof(B <int> ) < <sizeof(B <double> ) < <endl;//这句为什么编译不过去
==================================
实例化,会double::reference类型,所以编译错的