STD :: Preserbility Presondition с указателями данных (void)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 STD :: Preserbility Presondition с указателями данных (void)

Сообщение Anonymous »

Я пытаюсь обернуть голову вокруг предварительного кондиционирования достижимости std :: raunder в контексте (абстрактной) модели указателя C ++. Вот фрагмент кода, который заставляет меня запутаться в том, удовлетворена ли эта предварительная кондиционирование: < /p>

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

int x = 1;
int* px = &x; // px is an int* pointer with value "pointer to x"
void* pr = reinterpret_cast(&x); // p is a void* pointer with value "pointer to x"

// Convert pr pointer to an integral value and print it on the console/screen
std::cout 
Я полагаю, что приведенный выше подход все еще приводит к неопределенному поведению, но почему это так? Насколько я вижу:

1. reveterpret_cast 
гарантирует, что « значение любого интегрального типа или типа перечисления может быть преобразовано в тип указателя. Указатель, преобразованный в целое число достаточного размера и обратно в тот же тип указателя, гарантированно имеет свое первоначальное значение, в противном случае полученное указатель не может быть вновь благополучно , и мы здесь сделаем технически, что (в противном случае (в противном случае (в противном случае не может быть обеспечено.

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

pointer -> uintptr_t -> pointer< /code>).

2. Там нет какого -либо странного типа наказания, и все указатели указывают на действительные адреса, где соответствующие напечатанные объекты на самом деле существуют

3.  Аргументы, передаваемые STD :: raunder 
, после ReventPret_cast 'все указывают на действительные объекты на действительных значениях адреса, которые (в теории) удовлетворяют условию достижения
Я знаю, что мне, вероятно, не хватает какой -то важной концепции, но что именно это? Это как -то связано с тем, как указатели смоделированы по отношению к стандартной спецификации, которая делает все точки выше спорта? Или это что-то еще, сложно написано в стандарте, о котором я не знаю?

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

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

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

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

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

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