Черновик C ++ 0x, похоже, не указывает, подписаны ли новые типы символов Unicode или нет.Однако, как уже упоминали другие, поскольку нет отрицательных кодовых точек Unicode, было бы более целесообразно, чтобы char16_t
и char32_t
были без знака.(Опять же, было бы разумно, чтобы char
был без знака, но мы имеем дело с «отрицательными» символами с 70-х годов.)
Кроме того, поскольку UTF-16 находится в диапазоне от 0x0 до 0xFFFF(игнорируя суррогатные пары), вам потребуется весь диапазон 16-разрядного целого числа без знака, чтобы правильно представлять все значения.Было бы неудобно, если не сказать больше, если бы кодовые точки от 0x8000 до 0xFFFF были представлены в виде отрицательных чисел с char16_t
.
В любом случае, пока комитет C ++ 0x не скажет что-то определенное по этому вопросу, вы можетевсегда просто проверяйте свою реализацию:
#include <type_traits>
#include <iostream>
int main()
{
std::cout << std::boolalpha << std::is_signed<char16_t>::value << std::endl;
}
Это выводит false
с использованием GCC 4.45 в Linux.Так что, по крайней мере, на одной платформе новые типы Unicode определенно не подписаны.