Получение целочисленного (длинного) значения, представляющего адрес текущего объекта без UBC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Получение целочисленного (длинного) значения, представляющего адрес текущего объекта без UB

Сообщение Anonymous »

Я пытаюсь получить адрес объекта (текущий - *this < /code>) для использования при посевном генераторе. Затем я добавляю этот адрес, наряду с несколькими другими псевдо -случайными источниками, к std :: seed_seq, который я затем использую для засадки моего генератора.
Я беспокоюсь о том, как я получаю адрес *этого может быть не определенным поведением из -за моего использования revetpret_cast.

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

#include 
#include 
#include 

struct C {
C() {
std::cout 
g++ -std=c++23 mre.cc
< /code>
, а затем запустив его 5 раз в моей системе Arch Linux, я получаю значения, которые кажутся разумными и полезными для моей цели: < /p>
$ ./a.out
140735517651991
$ ./a.out
140720816496503
$ ./a.out
140721435514407
$ ./a.out
140731546749575
$ ./a.out
140737158244279
< /code>
Но, только потому, что цифры кажутся разумными и нет никакого сбоя или других плохих вещей, конечно, не говорят мне, есть ли на самом деле какой -либо UB. Я бы признателен за объяснение того, почему Reinterpret_cast 
действителен здесь.
Если нет; Я бы признателен за объяснение почему бы и нет и предложение лучшего (не обум) способа сделать это.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ent-object
Ответить

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

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

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

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

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