malloc分配的对象的动态类型是什么?

vit*_*aut 6 c++ malloc language-lawyer

C++标准指的是术语"动态类型"(并且C标准在类似的上下文中指的是"有效类型"),例如

如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义:

  • 对象的动态类型,

但是如何malloc确定分配的对象的动态类型?

例如:

void *p = malloc(sizeof(int));
int *pi = (int*)p;
Run Code Online (Sandbox Code Playgroud)

将动态类型对象的指向piint

Nic*_*las 8

根据C++规范:

动态类型:

<glvalue>由glvalue表达式表示的glvalue所指向的最派生对象(1.8)的类型

返回值malloc是未初始化存储的块.在该存储中没有构造任何对象.因此它没有动态类型.

void*不指向对象,并且只有对象具有一个动态的类型.

您可以通过开始其生命周期在该存储中创建对象.但是在你这样做之前,它只是存储.


Jen*_*edt 5

在 C 中,有效类型仅在访问对象时相关。然后 in 由

  • 声明类型,如果有的话
  • 它是另一个对象的副本的类型(例如memcpy
  • 访问它的左值的类型,例如,如果 avoid*转换为另一种指针类型(例如int*),然后取消引用。

malloc如果将 的返回值分配给malloc指针类型,则后者通常是ed 对象发生的情况。