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)
将动态类型对象的指向pi是int?
根据C++规范:
动态类型:
<glvalue>由glvalue表达式表示的glvalue所指向的最派生对象(1.8)的类型
返回值malloc是未初始化存储的块.在该存储中没有构造任何对象.因此它没有动态类型.
在void*不指向对象,并且只有对象具有一个动态的类型.
您可以通过开始其生命周期在该存储中创建对象.但是在你这样做之前,它只是存储.
在 C 中,有效类型仅在访问对象时相关。然后 in 由
memcpy)void*转换为另一种指针类型(例如int*),然后取消引用。malloc如果将 的返回值分配给malloc指针类型,则后者通常是ed 对象发生的情况。