Size: a a a

2020 November 27

P

Pepe 🐸 in pro.cxx
Pepe 🐸
нет. Время жизни объектов класса не закончено
мемберов имел ввиду
источник

m

magras in pro.cxx
Pepe 🐸
нет. Время жизни объектов класса не закончено
Я не думаю, что member function обладает lifetime. А речь шла о вызове member function.
источник

P

Pepe 🐸 in pro.cxx
magras
Я не думаю, что member function обладает lifetime. А речь шла о вызове member function.
ок да, я уже прочитал там ссылки на стандарт. Не задумывался об этом, ибо в конструкторе мембер функции всегда вызывал, а это до начала лайфтайма
источник

AP

Alexander Pshenichni... in pro.cxx
#вопрос к знатокам стандарта. Тут есть нарушение strict aliasing?

uint8_t buffer[8] = {1, 1, 1, 1, 0, 0, 0, 0};

uint32_t *p = reinterpret_cast<uint32_t *>(buffer);
printf("0x%x\n", *p);
источник

m

magras in pro.cxx
Alexander Pshenichnikov
#вопрос к знатокам стандарта. Тут есть нарушение strict aliasing?

uint8_t buffer[8] = {1, 1, 1, 1, 0, 0, 0, 0};

uint32_t *p = reinterpret_cast<uint32_t *>(buffer);
printf("0x%x\n", *p);
Зависит от того какой настоящий тип у uint8_t. Если один из стандартной тройки char, unsigned char, byte, вроде все ок.
источник

АР

Андрей Руссков... in pro.cxx
емнип это unspecified
источник

АР

Андрей Руссков... in pro.cxx
в том смысле что uint8_t, как сказали выше, может быть unsigned char или char, тогда по стандарту мы можем спокойно алиаситься
источник

D

Danya in pro.cxx
magras
Зависит от того какой настоящий тип у uint8_t. Если один из стандартной тройки char, unsigned char, byte, вроде все ок.
В Си char, signed char и unsigned char не compatible
источник

D

Danya in pro.cxx
В С++ иначе?
источник

АР

Андрей Руссков... in pro.cxx
а вот если uint8_t это distinct type, то нет
источник

АР

Андрей Руссков... in pro.cxx
Danya
В С++ иначе?
ну unsigned char != char != signed char если ты об этом
источник

AP

Alexander Pshenichni... in pro.cxx
Допустим даже, что в примере unsigned char вместо unit8_t. Стандарт действительно разрешает алиасить любой тип типом unsigned char, но тут пример в другую сторону
источник

AP

Alexander Pshenichni... in pro.cxx
unsigned char алиасится типом uint32_t, а не наоборот
источник

LA

Liber Azerate in pro.cxx
Alexander Pshenichnikov
#вопрос к знатокам стандарта. Тут есть нарушение strict aliasing?

uint8_t buffer[8] = {1, 1, 1, 1, 0, 0, 0, 0};

uint32_t *p = reinterpret_cast<uint32_t *>(buffer);
printf("0x%x\n", *p);
Да, здесь прямое нарушение, как минимум дважды
источник

m

magras in pro.cxx
Liber Azerate
Да, здесь прямое нарушение, как минимум дважды
Но не правил алиасинга.
источник

LA

Liber Azerate in pro.cxx
magras
Но не правил алиасинга.
Нет, и правил алиасинга, именно что можно алиасить чаром всё что угодно, но не в обратную сторону. Здесь можно было бы поправить через использование memcpy, однако мы должны были бы копировать часть буфера, по размеру равную uint32_t
источник

m

magras in pro.cxx
Liber Azerate
Нет, и правил алиасинга, именно что можно алиасить чаром всё что угодно, но не в обратную сторону. Здесь можно было бы поправить через использование memcpy, однако мы должны были бы копировать часть буфера, по размеру равную uint32_t
Возможно я ошибаюсь, но буфер char'ов всегда можно было использовать под любой тип. Да, объект в этом буфере нужно в начале создать и в примере выше есть проблемы с лайфтамом. Но мне сложно поверить что там есть проблема с алиасингом.
источник

АР

Андрей Руссков... in pro.cxx
Liber Azerate
Нет, и правил алиасинга, именно что можно алиасить чаром всё что угодно, но не в обратную сторону. Здесь можно было бы поправить через использование memcpy, однако мы должны были бы копировать часть буфера, по размеру равную uint32_t
тривиальные типы и структуры вроде можно рентерпреткастить в/из char. Но не помню наверняка
источник

АР

Андрей Руссков... in pro.cxx
Alexander Pshenichnikov
Допустим даже, что в примере unsigned char вместо unit8_t. Стандарт действительно разрешает алиасить любой тип типом unsigned char, но тут пример в другую сторону
unsigned char и char как раз могут алиаситься на любой тип
источник

АР

Андрей Руссков... in pro.cxx
одна из причин почему нужна u8string
источник