g ++给出错误:从'unsigned char'类型的表达式初始化'char&'类型的引用无效

Hra*_*ant 4 c++ initialization reference

当我尝试编译以下代码时

int main()
{
    unsigned char uc;
    char & rc = uc;
}
Run Code Online (Sandbox Code Playgroud)

g ++给出以下错误:从'unsigned char'类型的表达式初始化'char&'类型的引用无效.使用signed char而不是unsigned char时会发生同样的情况.但以下编译得很好

int main()
{
    unsigned char uc;
    const char & rc = uc;
}
Run Code Online (Sandbox Code Playgroud)

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

chr*_*ris 5

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

因为后者在unsigned char转换为a 时会创建一个临时绑定到const引用char,这是非const引用无法做到的.char,signed char和,unsigned char是三种不同的类型,如C++11§3.9.1中所述:

Plain char,signed char和unsigned char是三种不同的类型