我知道有些硬件平台你需要更多的信息来指向一个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)的平台上,假设应用于两者的相同属性.