在求职面试中,我对这个问题感到不知所措:
bool Res - 它向我们展示了什么?
template <class T>
class R
{
class A: public T {
virtual ~A(){}
};
public:
static const bool Res = sizeof(A) == sizeof(T);
};
Run Code Online (Sandbox Code Playgroud)
在我调查期间 - 我一直有sizeof(T)== 1,而sizeof(A)变化.解释将非常感激.
值Res应该表明是否T有任何virtual功能,尽管在C++标准中没有这样的保证:
T确实有virtual函数,A则不向表示添加任何内容,并且可以与大小相同T.T没有virtual函数,A 可能会添加一些东西来处理动态调度(通常是指向类似virtual函数指针表的指针)并且具有不同的大小.C++标准没有强制要求如何实现动态调度,并且实现可以从地址确定对象具有什么类型.实际上,所有实现都使用指向动态类型信息的指针.
一个有趣的问题是编译器是否可以检测到R<T>::A;不能用于继承的编译器,因此决定它实际上并不需要virtual函数指针.我很确定编译器可以做到这一点,使得价值R<T>::Res更值得怀疑.
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |