奇怪的char*编译错误?

Geo*_*ge2 3 c++ reference char

我的代码下面有什么问题吗?我得到了编译错误!

typedef unsigned char BYTE;

void foo(char* & p)
{
 return;
}

int main()
{
  BYTE * buffer;
  // error C2664: 'foo' : cannot convert parameter 1 from 'char *' to 'char *&'
  foo ((char*)buffer);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

提前谢谢,乔治

sho*_*osh 14

当您BYTE*转换char*为未命名的临时实体时,将使用该类型创建char*.您调用的函数接受a的引用,char*但您不能引用这样的临时实体,因为它不是真正的变量.


cod*_*gic 7

您可以执行reinterpret_cast<char*&>而不是静态强制转换

foo (reinterpret_cast<char*&>(buffer));
Run Code Online (Sandbox Code Playgroud)

或者,您可以使参数成为const引用:

void foo(char* const & p)
{
    return;
}
Run Code Online (Sandbox Code Playgroud)