我想我在这件事的理论背景中遗漏了一些东西。我知道有类似的帖子,但我还是不明白。
我有这样一段代码:
void somefunc1(Word &Key)
{
somefunc2(Key);
}
void somefunc2(char &char1)
{
return;
}
编译器在这里生成一个错误:
somefunc2(Key);
[BCC32 错误] Unit1.cpp(830):E2357 引用用“unsigned short”初始化,需要“char”类型的左值
我发现这是因为 ANSI 2003 对 C++ 处理临时对象和引用的规定,但我仍然不明白这里有什么问题。
当我进行 C 风格转换时:
somefunc2( *(char*)&Key )
它解决了一个问题。
谁能告诉我哪里出了问题,为什么会出错?
最佳答案
WORD &Key;
引用始终是某个其他对象的别名,并且必须使用已存在的对象对其进行初始化。因此,上述声明无效。以下是正确的:
WORD &Key = alreadyExistingKey;
[以上不再相关,问题已更改。]
编辑:
void somefunc1(Word &Key)
{
somefunc2(Key);
}
void somefunc2(char &char1)
{
return;
}
[BCC32 错误] Unit1.cpp(830):E2357 引用用“unsigned short”初始化,需要“char”类型的左值
编译器告诉你 somefunc2
期待 [引用,即别名] a char
.但是Key
在somefunc1
而是 Word
,据我所知是 unsigned short
的 typedef .
在我看来,您的“c 风格”补救措施正在残酷地重新解释 &Key
, 这是 unsigned short
的地址, 作为 char
的地址.您要传递给 somefunc2
的内容因此是 Key
的第一个字节,解释为(签名)char
.我想结果取决于字节顺序。我不会依赖该代码。
关于c++ - 将左值绑定(bind)到引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382318/