将左值绑定到引用

And*_*rew 4 c++ bind reference lvalue

我想我在这个问题的理论背景中错过了.我知道有类似的帖子,但我仍然没有得到它.

我有这样的代码:

void somefunc1(Word &Key)
{
    somefunc2(Key);
}

void somefunc2(char &char1)
{
    return;
}
Run Code Online (Sandbox Code Playgroud)

编译器在这里生成一个错误:

somefunc2(Key);
Run Code Online (Sandbox Code Playgroud)

[BCC32错误] Unit1.cpp(830):E2357使用'unsigned short'初始化的引用,需要'char'类型的左值

我发现这是因为ANSI 2003对C++处理临时和引用的规定,但我仍然没有弄到这里有什么问题.

当我做c风格转换时:

somefunc2( *(char*)&Key )
Run Code Online (Sandbox Code Playgroud)

它解决了一个问题.

任何人都可以提示我出了什么问题,为什么会出错?

Fed*_*oni 10

 WORD &Key;
Run Code Online (Sandbox Code Playgroud)

引用始终是某个其他对象的别名,并且必须使用已存在的对象进行初始化.因此,上述声明无效.以下是正确的:

 WORD &Key = alreadyExistingKey;
Run Code Online (Sandbox Code Playgroud)

[以上不再相关,问题已经改变.]

编辑:

void somefunc1(Word &Key)
{
   somefunc2(Key);
}
void somefunc2(char &char1)
{
   return;
}
Run Code Online (Sandbox Code Playgroud)

[BCC32错误] Unit1.cpp(830):E2357使用'unsigned short'初始化的引用,需要'char'类型的左值

编译器告诉你somefunc2正在期待[引用,即a的别名] char.但Keysomefunc1是不是Word,我的理解是对一个typedef unsigned short.

在我看来,你的"c式"补救措施是残酷的重新解释&Key,这是一个地址unsigned short,作为一个地址char.somefunc2因此,您传递给它的是第一个字节Key,解释为(已签名)char.我想结果取决于字节序.我不会依赖那个代码.