Widziałem kawałek poprawnego kodu C, który próbowałem skompilować jako C++ i dostałem błąd, którego nie mogę zrozumieć.Konwersja z char * do podpisanego char *
char* t;
signed char* v = t;
error: invalid conversion from
char*
tosigned char*
Z tego co dowiedziałem się, char
i signed char
są semantycznie identyczne, ale są nadal uważane za odmienne przez kompilator.
Wiem, że błąd wynika z różnicy między tymi dwoma typami, moje pytanie brzmi: Dlaczego ta różnica istnieje?
O ile wiem char
jest realizowany albo jako signed char
lub jako unsigned char
więc powinien być identyczny z jednej lub drugiej strony.
Konsultowałem się z this question i nie odpowiada na pytanie, które chcę poznać.
Lubię myśleć o '' signed' i niepodpisane char' jak arytmetycznych * * typów, tylko małych liczb całkowitych, w istocie, podczas gdy 'char' jest I/Typ O - argumenty wiersza poleceń, środowisko i odczyt/zapis poprzez pliki są wykonywane pod kątem znaków. –
to pytanie zostało już odebrane na http://stackoverflow.com/questions/436513/char-signed-char-char-unsigned -char - najbardziej podstawowe wyjaśnienie jest takie, że 'unsigned char' zawiera się w przedziale od 0..255 i "signed char" ma zakres od -127..128. Więc nie możesz przekonwertować 'signed char' z -42 na' unsigned char' lub skonwertować 'unsigned char' z 142 na' signed char'. 'char' jest zwykle czytane jako' signed char'. –
@alle_meije i 'signed char' i' char' * są * równe. I nie widziałem tego pytania, chociaż szukałem go ... – Geoffroy