From: Fred P. Jr. <fps...@ya...> - 2003-08-26 18:00:24
|
Mike Nordell wrote: >>There is no real change in the way code works for most platforms, since >>char is usually mapped to signed, > > > "char" is usually a signed type, but it sure isn't "mapped" to anything but > "char". No matter what platform you use, and what compiler switches you use: I think Mike is correct. This is my understanding of how char works. As I recall, char is the only integral type like this. I *think* if you check the typeids of short, signed short, unsigned short, then you'll only see two distinct typeids. Perhaps, a variation of Mike's code would help. In the code below I mixed the three flavors of char. [I used pointers to get around the compiler doing implicit conversions and masking the differences.] As you can see from the compiler errors, g++ (3.2) considers char*, signed char* or unsigned char* to be three distinct pointer types. Finally, I checked the <limits> header file. There are three distinct specializations of the numeric_limits template class: numeric_limits<char>, numeric_limits<signed char>, numeric_limits<unsigned char>. So, no mapping appears to be taking place. Hope this helps, ---Fred P. ---------------------------------- int main() { char *cp = "1"; signed char *scp = cp; unsigned char *ucp = cp; cp = scp; cp = ucp; scp = ucp; ucp = scp; } ----------------------------------- g++ -g char.cpp char.cpp: In function `int main()': char.cpp:4: invalid conversion from `char*' to `signed char*' char.cpp:5: invalid conversion from `char*' to `unsigned char*' char.cpp:6: invalid conversion from `signed char*' to `char*' char.cpp:7: invalid conversion from `unsigned char*' to `char*' char.cpp:8: invalid conversion from `unsigned char*' to `signed char*' char.cpp:9: invalid conversion from `signed char*' to `unsigned char*' |