我知道有些硬件平台你需要更多的信息来指向一个char你需要指向int的平台(具有不可寻址字节的平台,所以一个指针char需要存储指向一个字的指针以及一个字节的索引)在这个词).所以sizeof(int*) < sizeof(char*)在这样的平台上有可能.
指向非联合类的指针会发生类似的事情吗?C++允许在虚函数上使用协变返回类型.假设我们有这样的类:
struct Gadget
{
// some content
};
struct Widget
{
virtual Gadget* getGadget();
};
Run Code Online (Sandbox Code Playgroud)
任何调用的代码getGadget()在接收时都必须工作Gadget*,但相同的代码(实际上是相同的编译二进制代码)必须在收到指向同样派生类型的指针时工作Gadget(也许是在完全不同的库中定义的代码) .我可以合理地看到这种情况发生的唯一方法是sizeof(T*) == sizeof(U*)所有非联合类类型T和U.
所以我的问题是,在一个特定平台上给出一个特定的实用编译器(不包括假设的Hell ++),是否有理由期望所有指向非联合类类型的指针都具有相同的大小?或者是否有一个实际的原因,为什么编译器可能希望使用不同的大小,同时保持符合协变返回类型?
在存在指针的不同"级别"(例如__near和__far)的平台上,假设应用于两者的相同属性.
这里第二次演员表示错误
cast.cc:35:35: error: cannot dynamic_cast ‘base’ (of type ‘class CBase*’) to type ‘class CDerived*’ (source type is not polymorphic)
CBase * base = new CDerived;
CBase* pb;
CDerived * der = new CDerived;
CDerived* pd;
pb = dynamic_cast<CBase*>(der); // ok: derived-to-base
pd = dynamic_cast<CDerived*>(base); // wrong: base-to-derived
Run Code Online (Sandbox Code Playgroud)
这意味着什么?
如果我使基类具有多态性,为什么会这样?
有人可以让我知道这背后的基本概念.