powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Назначение char8_t в С++20
16 сообщений из 16, страница 1 из 1
Назначение char8_t в С++20
    #39985400
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В С++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
Назначение char8_t в С++20
    #39985407
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одна из особенностей char8_t в том что он не алиасится с другими типами в отличие от char.
Это дает возможность компилятору дополнительно оптимизировать код исключая повторное чтение памяти.

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



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

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

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



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

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

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

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

Я знаю несколько таргетов, где sizeof(char) == 2 или == 4
...
Рейтинг: 0 / 0
Назначение char8_t в С++20
    #39985422
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Назначение char8_t в С++20
    #39985432
vAH_O6Vg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Назначение char8_t в С++20
    #39985436
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
Anatoly Moskovsky
пропущено...


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

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

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

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

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

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


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