Как boost::interprocess::offset_ptr позволяет избежать неопределенного поведения?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как boost::interprocess::offset_ptr позволяет избежать неопределенного поведения?

Сообщение Anonymous »

Обновление: добавление подробностей о реализации boost.
Идея NullableOffsetPtr вдохновлена ​​boost::interprocess::offset_ptr.
В какой степени может ли их реализация справиться с ограничениями expr.add#4.2 и избежать UB?
  • Нашел термин «незаконно, но правильно» в контексте встраивания:< /li>

Код: Выделить всё

   //Note: using the address of a local variable to point to another address
//is not standard conforming and this can be optimized-away by the compiler.
//Non-inlining is a method to remain illegal but correct

Однако я не понимаю, как встраивание связано с UB, и существует ли широко признанная незаконная корректность, которую можно было бы проверить.
  • boost::interprocess::offset_ptr выполняет всю арифметику с использованием uintptr_t, полностью избегая ограничений expr.add#4.2. По крайней мере, для преобразований T offset_ptr он также гарантирует обратный путь, т. е. указатель воспроизводится из того же целочисленного значения, которое получено в результате преобразования исходного указателя в целочисленное. Это всего лишь следствие того, что арифметические операции являются обратными, поэтому с помощью reinterpret_cast пункта объяснения 3) утверждение
гарантировано будет иметь исходное значение. значение

звучит достаточно, чтобы его можно было четко определить? Я сомневаюсь, что это справедливо и для операторов увеличения/уменьшения offset_ptr, но для меня это не имеет большого значения.
  • Выполняется преобразования с помощью вспомогательных функций с использованием аргументов const volutious void*. Таким образом, reinterpret_cast никогда не соединяет T* и uintptr_t напрямую, но всегда имеет тип void на входе или выходе.
Можете ли вы помочь мне понять, применимы ли и какие из этих методов к определенному и неопределенному поведению?

Подробнее здесь: https://stackoverflow.com/questions/784 ... -behaviour
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»