Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Назначение char8_t в С++20 / 16 сообщений из 16, страница 1 из 1
30.07.2020, 17:53
    #39985400
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
В С++20 добавляется тип char8_t и это не псевдоним к char. Я что-то сообразить не могу, вот что можно было бы сказать таким кодом?

Код: plaintext
1.
2.
void foo(char *);
void foo(char8_t *);


Что значит такая перегрузка? Если std::u8string содержит utf-8 и, наверное, там заработает length(), то что тогда содержит std::string? UTF-8 everywhere or not?

Ну и со Студией. Если файл в кодировке utf-8 without BOM, то такой код некорректный (в строке будет мусор):

Код: plaintext
1.
char8_t *str = u8"Привет";


Это что теперь файлы перекодировать?
...
Рейтинг: 0 / 0
30.07.2020, 18:23
    #39985407
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Одна из особенностей char8_t в том что он не алиасится с другими типами в отличие от char.
Это дает возможность компилятору дополнительно оптимизировать код исключая повторное чтение памяти.

Ну а что касается псевдонимов, то char8_t это отдельный тип, и не char и не unsigned char, хотя по сути это unsigned char.
...
Рейтинг: 0 / 0
30.07.2020, 18:29
    #39985410
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Подстелили соломку против ведроида с его неожиданным 16-ти разрядным char.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.07.2020, 18:32
    #39985412
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
petrav
Ну и со Студией. Если файл в кодировке utf-8 without BOM, то такой код некорректный (в строке будет мусор):
Код: plaintext
1.
char8_t *str = u8"Привет";



Наверно баг. Странно что дало присвоить конст в неконст ))
...
Рейтинг: 0 / 0
30.07.2020, 18:40
    #39985413
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Dimitry Sibiryakov
Подстелили соломку против ведроида с его неожиданным 16-ти разрядным char.

Вряд ли.
По стандарту char равен 1 байту. На ARMe байт = 8 бит, так что не сходится.

А реальная причина, это то что знаковость char не определена стандартом, и если он оказывается знаковым то с ним неудобно работать в контексте utf8.
Еще одна причина, что теперь есть явное указание в типе что это utf8, и можно перегружать функции, как в первом сообщении.
...
Рейтинг: 0 / 0
30.07.2020, 18:46
    #39985414
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Anatoly Moskovsky
petrav
Ну и со Студией. Если файл в кодировке utf-8 without BOM, то такой код некорректный (в строке будет мусор):
Код: plaintext
1.
char8_t *str = u8"Привет";



Наверно баг. Странно что дало присвоить конст в неконст ))

Стауструп писал, что он специально так сделал. Это исключение из правил. Потому что иначе был бы затруднён переход на С++ с Си. Память конечно read only.
...
Рейтинг: 0 / 0
30.07.2020, 18:58
    #39985418
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Anatoly Moskovsky

Еще одна причина, что теперь есть явное указание в типе что это utf8, и можно перегружать функции, как в первом сообщении.

Вот мой вопрос как раз про это! Зачем такая перегрузка если и в char*, и char8_t* у нас utf-8 ?
...
Рейтинг: 0 / 0
30.07.2020, 19:11
    #39985421
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Anatoly Moskovsky
По стандарту char равен 1 байту.
По какому?

Я знаю несколько таргетов, где sizeof(char) == 2 или == 4
...
Рейтинг: 0 / 0
30.07.2020, 19:13
    #39985422
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
petravВ С++20 добавляется тип char8_t и это не псевдоним к char.

А ещё в C++11 добавились char16_t и char32_t. Комитет просто решил докончить картину:
char16_t - type for UTF-16 character representation, required to be large enough
to represent any UTF-16 code unit (16 bits). It has the same size, signedness, and
alignment as std::uint_least16_t, but is a distinct type.
char32_t - type for UTF-32 character representation, required to be large enough to
represent any UTF-32 code unit (32 bits). It has the same size, signedness, and alignment
as std::uint_least32_t, but is a distinct type.

(since C++11)

char8_t - type for UTF-8 character representation, required to be large enough to
represent any UTF-8 code unit (8 bits). It has the same size, signedness, and alignment as
unsigned char (and therefore, the same size and alignment as char and signed char), but is
a distinct type.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.07.2020, 20:04
    #39985432
vAH_O6Vg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Aklin
Anatoly Moskovsky
По стандарту char равен 1 байту.
По какому?

Я знаю несколько таргетов, где sizeof(char) == 2 или == 4


Для сишечки(брал стандарт 17го года) раздел "The sizeof and _ Alignof operators"
When sizeof is applied to an operand that has type char , unsigned char , or signed char , (or a qualified version thereof) the result is 1.
Для плюсиков(брал стандарт 14го года) раздел "Sizeof"
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1.

Таргеты нагло нарушающие стандарт хотелось бы узнать.
...
Рейтинг: 0 / 0
30.07.2020, 20:47
    #39985436
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
petrav
Anatoly Moskovsky
пропущено...


Наверно баг. Странно что дало присвоить конст в неконст ))

Стауструп писал, что он специально так сделал. Это исключение из правил. Потому что иначе был бы затруднён переход на С++ с Си. Память конечно read only.
Нет никакого исключения начиная с C++11.
Aklin
Anatoly Moskovsky
По стандарту char равен 1 байту.
По какому?

Я знаю несколько таргетов, где sizeof(char) == 2 или == 4
А я знаю таргет где sizeof(char) == 3.14
...
Рейтинг: 0 / 0
31.07.2020, 10:24
    #39985487
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
petrav
Стауструп писал, что он специально так сделал. Это исключение из правил. Потому что иначе был бы затруднён переход на С++ с Си. Память конечно read only.

Исключение было для char.
А char8_t это новый тип - ему исключений не надо, потому что нет легаси кода.
...
Рейтинг: 0 / 0
01.08.2020, 11:42
    #39985763
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
Anatoly Moskovsky
Исключение было для char.
и wchar_t
...
Рейтинг: 0 / 0
03.08.2020, 15:28
    #39986137
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
vAH_O6Vg
Таргеты нагло нарушающие стандарт хотелось бы узнать.
https://ru.stackoverflow.com/questions/118221/Кто-нибудь-встречал-в-своей-практике-sizeofchar-1
...
Рейтинг: 0 / 0
03.08.2020, 15:37
    #39986140
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20
По той ссылке прямо обратное написано, что sizeof(char)=1, а вот "байты" могут быть любого размера (8,16,32 бит в машинном слове).

Если я правильно прочитал.
...
Рейтинг: 0 / 0
03.08.2020, 17:17
    #39986198
vAH_O6Vg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Назначение char8_t в С++20

Как правильный помечен ответ с частой путаницей между байтом(минимальная совокупность битов, обрабатываемая одновременно) и октетом(8 бит). По стандарту C в char содержится CHAR_BIT бит и указано, что CHAR_BIT >= 8. Интересный левый факт: в стандарте POSIX CHAR_BIT == 8. Portable Operating System Interface менее Portable чем сишечка.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Назначение char8_t в С++20 / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]