Подтвердить что ты не робот

Имеет std:: byte pointer те же самые эффекты сглаживания, что и char *?

С++ (и C) строгие правила псевдонимов включают, что a char* и unsigned char* могут иметь псевдоним любого другого указателя.

AFAIK нет аналогичного правила для uint8_t*.

Таким образом, мой вопрос: каковы правила сглаживания для std::byte указатель?

Ссылка на С++ в настоящее время просто указывает:

Как и типы символов (char, unsigned char, подписанный char), он может использоваться для доступа к необработанной памяти, занятой другими объектами (представление объекта), но в отличие от этих типов, это не тип символа и не является арифметическим типом.

4b9b3361

Ответ 1

Из текущего стандартного черновика ([basic.types]/2):

Для любого объекта (кроме подобъекта базового класса) тривиально тип копирования T, независимо от того, имеет ли объект допустимое значение типа T, базовые байты ([intro.memory]), составляющие объект, могут быть скопирован в массив char, unsigned char или std:: byte([cstddef.syn]). 43 Если содержимое этого массива копируется обратно в объект, объект впоследствии должен сохранить свое первоначальное значение.

Итак, да, те же правила псевдонимов применяются к трем типам, точно так же, как суммируется cppreference.

Также может быть полезно упомянуть ([basic.lval]/8.8):

Если программа пытается получить доступ к сохраненному значению объекта через glvalue другого, чем один из следующих типов, поведение undefined:

  • a char, unsigned char или std:: byte type.