Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ g++;给出错误:初始化类型为‘;的引用无效;char&’;来自类型为‘的表达式;无符号字符’;_C++_Reference_Initialization - Fatal编程技术网

C++ g++;给出错误:初始化类型为‘;的引用无效;char&’;来自类型为‘的表达式;无符号字符’;

C++ g++;给出错误:初始化类型为‘;的引用无效;char&’;来自类型为‘的表达式;无符号字符’;,c++,reference,initialization,C++,Reference,Initialization,当我试图编译以下代码时 int main() { unsigned char uc; char & rc = uc; } g++给出以下错误:从“unsigned char”类型的表达式初始化“char&”类型的引用无效。使用有符号字符而不是无符号字符时也会发生同样的情况。 但是下面的代码编译得很好 int main() { unsigned char uc; const char & rc = uc; } 为什么不能用“unsigned ch

当我试图编译以下代码时

int main()
{
    unsigned char uc;
    char & rc = uc;
}
g++给出以下错误:从“unsigned char”类型的表达式初始化“char&”类型的引用无效。使用有符号字符而不是无符号字符时也会发生同样的情况。 但是下面的代码编译得很好

int main()
{
    unsigned char uc;
    const char & rc = uc;
}
为什么不能用“unsigned char”类型的变量初始化“char&”,而可以用它初始化“const char&”?

为什么不能用“unsigned char”类型的变量初始化“char&”,而可以用它初始化“const char&”

由于后者在
无符号字符
转换为
字符
时会创建一个临时绑定到常量引用,因此非常量引用无法执行此操作<代码>字符、
有符号字符
无符号字符
是三种不同的类型,如C++11§3.9.1所述:

纯字符、有符号字符和无符号字符是三种不同的类型

<>“C++编译器将类型、符号char和unchar字符的变量视为不同的类型。”

以下链接将澄清:

更改以下内容:

int main()
{
    unsigned char uc;
    unsigned char& rc = uc;
}

今天我面对了这个错误,我只想和大家分享我的发现

< Bjarne Stroustrup >在《C++程序设计语言》第三版中写道:

§5.5参考文件

当初始值设定项为 左值(可获取其地址的对象;见§4.9.6)。这个 “普通”T&的初始值设定项必须是类型为T的左值

常量T&的初始值设定项不必是左值,甚至不必是类型T 在这种情况下

[1] 首先,必要时应用到T的隐式类型转换(参见 §C.6)

[2] 然后,将结果值放入临时变量 T型和

[3] 最后,这个临时变量用作 初始化器


char
signed char
之间有什么区别?@alexandrubarbosie:在某些编译器上,
char
可能是无符号的。但忽略这一点,这三种类型始终是三种不同的类型,即使其中两种行为相同。这会对指针、引用、函数重载和模板参数产生影响。@Alexandrubarbosie,
char
可以是有符号的,也可以是无符号的——这取决于实现——但正如明确指出的那样,这三种类型都是不同的,所以实现不能做到
typedef signed char