【发布时间】:2023-03-24 13:20:01
【问题描述】:
我遇到了一些我不太理解的东西。假设我想将一个字符指针传递给一个引用 void 指针的函数。
void doStuff(void*& buffer)
{
// do something
}
我通常会这样做:
int main()
{
unsigned char* buffer = 0;
void* b = reinterpret_cast<void *>(buffer);
doStuff(b);
return 0;
}
为什么不能直接将 reinterpret_cast 传递给函数?
int main()
{
unsigned char* buffer = 0
// This generate a compilation error.
doStuff(reinterpret_cast<void *>(buffer));
// This would be fine.
doStuff(reinterpret_cast<void *&>(buffer));
return 0;
}
这种行为背后一定有充分的理由,但我不明白。
【问题讨论】:
-
考虑阅读模板。
-
为什么会引用
void指针?这个例程可能会做什么? -
@BaummitAugen:可以重新分配吗?
-
@JonathanPotter 这听起来比
realloc还要糟糕。 -
我认为真正的答案是
reinterpret_cast产生一个纯右值,它不能绑定到对非常量的引用。
标签: c++ casting parameter-passing pass-by-reference