【发布时间】:2014-08-27 10:24:04
【问题描述】:
我知道有些硬件平台需要更多信息才能指向char,而不是指向int(平台具有不可寻址字节,因此需要存储指向char 的指针指向单词的指针以及单词中字节的索引)。所以有可能sizeof(int*) < sizeof(char*)在这样的平台上。
指向非联合类的指针会发生类似的情况吗? C++ 允许在虚函数上使用协变返回类型。假设我们有这样的类:
struct Gadget
{
// some content
};
struct Widget
{
virtual Gadget* getGadget();
};
任何调用getGadget() 的代码在接收到Gadget* 时都必须工作,但是相同的代码(实际上是相同的编译后的二进制代码)在接收到指向类型的指针时必须工作也派生自Gadget(可能是在完全不同的库中定义的)。对于所有非联合类类型T 和U,我可以合理地看到这种情况发生的唯一方法是sizeof(T*) == sizeof(U*)。
所以我的问题是,给定一个特定平台上的特定实用编译器(不包括假设的 Hell++),期望所有指向非联合类类型的指针都是相同的是否合理尺寸?或者是否有一个实际的原因,为什么编译器可能希望使用不同的大小,同时保持与协变返回类型的兼容?
在存在不同“级别”指针的平台上(例如__near 和__far),假设两者都应用了相同 属性。
【问题讨论】:
-
附注:在嵌入式世界中有很多数据指针和代码指针大小不同的示例。
-
@Lindydancer 当然。但我只是明确地询问数据指针,并且只询问其中的一个子集。
-
@Casey
language-lawyer已被添加和删除一次。你确定它适用吗?毕竟,我问的是实际的实现,而不是一个假设的实现,它会遵循标准的文字,而在实践中做的事情完全愚蠢。
标签: c++ pointers sizeof language-lawyer