相关疑难解决方法(0)

指向非联合类的指针大小可以不同吗?

我知道有些硬件平台你需要更多的信息来指向一个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*)所有非联合类类型TU.

所以我的问题是,在一个特定平台上给出一个特定的实用编译器(不包括假设的Hell ++),是否有理由期望所有指向非联合类类型的指针都具有相同的大小?或者是否有一个实际的原因,为什么编译器可能希望使用不同的大小,同时保持符合协变返回类型?

在存在指针的不同"级别"(例如__near__far)的平台上,假设应用于两者的相同属性.

c++ pointers sizeof language-lawyer

7
推荐指数
1
解决办法
201
查看次数

动态转换不适用于非多态基类?

这里第二次演员表示错误

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)

这意味着什么?

如果我使基类具有多态性,为什么会这样?

有人可以让我知道这背后的基本概念.

c++ casting

2
推荐指数
1
解决办法
1529
查看次数

标签 统计

c++ ×2

casting ×1

language-lawyer ×1

pointers ×1

sizeof ×1