signed char 和char有啥区别???

来源:百度知道 编辑:UC知道 时间:2024/05/15 08:46:18
另外,
#include <iostream.h>

void f(char c) { cout<<c<<endl;}
void g(char &c) { cout<<c<<endl;}

int main()
{
char c;
signed char sc;

f(c);
f(sc);

g(c);
g(sc);//!!!错误:unsigned char->char产生右值
//不理解这个错误是什么意思..帮忙解释一下,谢谢

return 0;
}
而且调用f(sc)时却没有错误,为什么???

不好意思写错个地方 !!!

上面补充处应该是signed char->char产生右值

最好能讲的通俗易懂些

//欢迎在线讨论
#include <iostream.h>

void f(char c) { cout<<c<<endl;}
void g(char &c) { cout<<c<<endl;}
void g(signed char &c) { cout<<c<<endl;}

int main()
{
char c;
signed char sc;

f(c);
f(sc);

g(c);
g(sc);

return 0;
}

A reference that is not to 'const' cannot be bound to a non-lvalue
非常量的引用不能绑定于一个非左值,加个const就行了
void g(const char &c) { cout<<c<<endl;}
不过我也不理解char不是等同于signed char吗?
出现这个问题说明两者还是不等,把signed char到char出现了类型转换,所以出现了sc的拷贝,所以不能改变sc的内容,必须定义成const类型引用.

signed是带符号的吧

某些编译器中,char 默认是有符号的(signed)。对于这类型的编译器来说,char 的表示范围通常是 -128 到 127 。而另外一些编译器中,char 默认是无符号的(unsigned)。对于这类型的编译器来说,char 的表示范围通常是 0 到 255 。一般来说,编译器的使用说明会注明它默认把 char 当作有符号的还是无符号的。

从 C89 开始,我们可以使用关键字 signed 和 unsigned 来修饰 char 。这么一来,无论编译器默认 char 是有符号的也好,无符号的也罢,我们都可以用 signed char 表示有符号 char ,也可以用 unsigned