【问题标题】:what does it mean typedef char *b?typedef char *b 是什么意思?
【发布时间】:2023-03-10 06:21:02
【问题描述】:

我正在阅读这个重载 operator new 的内存管理代码。有类似的表达

typedef char *b

后来在代码中 b 是这样使用的:

b(h); //h is a pointer to some class;

h 在这里定义:

static Head* h= (Head*) HEAP_BASE_ADDRESS;

我假设当使用 b 时,它被认为是指向 char 的指针。但是指针怎么可能有像 b() 这样的表达式呢?这里有某种转换吗?我可以理解为 b 现在与 h 具有相同的地址吗?

【问题讨论】:

  • b 被定义为类型名称,特别是char* 类型的别名。 b(h) 是函数式类型转换,相当于((char*)h)

标签: c++11 pointers memory-management operator-keyword


【解决方案1】:

您发布的第一行代码是typedef,它为char* 创建了一个别名b。第二行代码显示了一个功能样式 type conversionhb

我可以理解为 b 现在与 h 具有相同的地址吗?

b 只是char* 的别名,所以b(h) 最终什么都不做,除非您存储该表达式的结果,例如:

b b_ptr = b(h); // equivalent to: char* b_ptr = ((char*)h);

函数式类型转换仅适用于单字类型名称,所以如果你想使用这种转换风格,例如一个指针,你必须先typedef它。 (这就是typedef char *b的原因。)这种转换风格可以用于int(3.14 + 6.67)这样的表达式。

【讨论】:

  • 非常感谢。现在我懂了。源代码是这样使用的:return (void*) (b(h) + sizeof(Head));所以它基本上返回了距离这个字符地址1个头大小的地址。现在一切都清楚了。非常感谢
  • 您在此处评论的原始代码 (return (void*) (b(h) + sizeof(Head));) 是 return (void*)(++h); 的一种奇怪说法,但我没有看到完整的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2017-02-02
  • 2013-12-16
  • 2014-01-16
  • 2023-03-18
相关资源
最近更新 更多