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