Почему оператор const int8_t* cstr = "asdf";
выдает ошибку
invalid conversion from ‘const char*’ to ‘const int8_t*’
Разве int8_t*
и char*
не одинаковы? Я пропустил что-то тонкое здесь?!
Почему оператор const int8_t* cstr = "asdf";
выдает ошибку
invalid conversion from ‘const char*’ to ‘const int8_t*’
Разве int8_t*
и char*
не одинаковы? Я пропустил что-то тонкое здесь?!
const signed char*
не то же самое, что const char*
. Проверьте настройки компиляции, потому что это объясняет. int8_t
всегда (никогда не говори никогда =) по крайней мере везде, где я видел) определяется как signed char
.
signed char
никогда не совпадает с char
. Они всегда разные.
- person Kerrek SB; 12.09.2012
char
не обязательно должно быть либо signed
, либо unsigned
(для unsigned
это понимается так, как мы явно пишем unsigned char
) Тогда есть ли какое-то программное значение такого разграничения - потому что в любом месте для любой программы будет достаточно либо signed char
, либо unsigned char
?
- person zeropoint; 12.09.2012
char
будет подписанным или беззнаковым, но в любом случае будет отличным от signed char
и unsigned char
типом. Это имеет то же значение, что и отдельные типы в C++.
- person bames53; 12.09.2012
Согласно [18.4 Целочисленные типы]:
typedef signed integer type int8_t; // optional
И [3.9.1 Основные типы]:
Обычный символ, знаковый символ и беззнаковый символ — это три разных типа.
int8_t
— это целочисленный тип со знаком (в моей системе он определяется как signed char
), а char
и signed char
— разные типы, поэтому они разные.
char
не указан и может быть любым в зависимости от того, что выбирает реализация. - person Mysticial   schedule 12.09.2012