我正在阅读这个内存管理代码重载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具有相同的地址吗?
答案 0 :(得分:1)
您发布的第一个代码行是typedef
,它为char*
创建b
的别名。第二个代码行显示从h
到b
的功能样式 type conversion。
我可以理解它,因为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)
等表达式。