在求职面试中,我对这个问题感到不知所措:
bool Res - 它向我们展示了什么?
template <class T>
class R
{
class A: public T {
virtual ~A(){}
};
public:
static const bool Res = sizeof(A) == sizeof(T);
};
在我调查期间 - 我一直有sizeof(T)== 1,而sizeof(A)变化。非常感谢解释。
答案 0 :(得分:6)
Res
的值应指明T
是否具有virtual
函数,尽管C ++标准中没有此类保证:
T
确实有virtual
函数,则A
不会向代表添加任何内容, 的大小与{{{1}相同1}}。T
没有T
函数,virtual
可能会添加一些内容来处理动态调度(通常是指向{{}的指针{1}}函数指针表)并且具有不同的大小。C ++标准并没有强制要求如何实现动态调度,并且实现可以能够从地址确定对象具有什么类型。实际上,所有实现都使用指向动态类型信息的指针。
一个有趣的问题是编译器是否可以检测到A
不能用于继承,从而确定它实际上并不需要virtual
函数无论如何指针。我非常确定编译器可以这样做,使R<T>::A;
的值更值得怀疑。