Что такое неопределенное поведение при этих преобразованиях указателей?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Что такое неопределенное поведение при этих преобразованиях указателей?

Сообщение Anonymous »

Я разрабатываю очень минимальный класс указателя смещения. Он показывает выходные данные, зависящие от уровня оптимизации, что предполагает неопределенное поведение. Но почему и как это можно исправить? См. например

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

#include 
#include 

template
class NullableOffsetPtr
{
public:
NullableOffsetPtr(T const* ptr) :
offset_{
ptr == nullptr ? std::ptrdiff_t{1} : reinterpret_cast(ptr) - reinterpret_cast(this)}
{
}

T* get()
{
return offset_ == 1 ? nullptr : reinterpret_cast(reinterpret_cast(this) + offset_);
}

private:
std::ptrdiff_t offset_; // Using units of bytes, as alignments of *this and *ptr may not match.
};

class Sample
{
};

int main(int argc, char* argv[])
{
Sample sample;
NullableOffsetPtr ptr{&sample};

std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78427986/what-is-undefined-behaviour-in-these-pointer-conversions[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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