Все ли указатели имеют одинаковый размер в C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Все ли указатели имеют одинаковый размер в C++?

Сообщение Anonymous »

Недавно я наткнулся на следующее утверждение:

Все указатели довольно часто имеют одинаковый размер, но технически возможно, что типы указателей могут иметь разные размеры.

Но затем я наткнулся на следующее утверждение:

Хотя указатели - это все одинакового размера, поскольку они просто хранят адрес памяти, мы должны знать, на что они указывают.

Я не уверен, какое из приведенных выше утверждений верно. Второе цитируемое утверждение выглядит так, как будто оно взято из заметок по C++ из компьютерных наук Университета штата Флорида.

Вот почему, по моему мнению, все указатели должны иметь одинаковый размер:
1) Скажем, так:

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

int i = 0;
void* ptr = &i;
Теперь предположим, что стандарт C++ позволяет указателям иметь разные размеры. Далее предположим, что на какой-то произвольной машине/компиляторе (поскольку это разрешено стандартом) void* имеет размер 2 байта, а int* имеет размер 4 байта.
Теперь я думаю, что здесь есть проблема, заключающаяся в том, что в правой части есть int*, имеющий размер 4 байта, а в левой части у нас есть void*, имеющий размер 2 байта. Таким образом, когда происходит неявное преобразование из int* в void*, произойдет некоторая потеря информации.
2) Все указатели содержат адреса. Поскольку для данной машины все адреса имеют одинаковый размер, вполне естественно (логично), что все указатели также должны иметь одинаковый размер.
Поэтому я думаю, что вторая цитата верна.

Мой первый вопрос: что говорит об этом стандарт C++?
Мой второй вопрос: если стандарт C++ допускает указатели разного размера, то есть ли для этого причина? Я имею в виду, что разрешение указателям иметь разный размер кажется мне немного неестественным (учитывая два момента, которые я объяснил выше). Итак, я почти уверен, что комитет по стандартизации, должно быть, уже подумал об этом (что указатели могут иметь разные размеры) и уже имел причину разрешить указателям иметь разные размеры. Обратите внимание, что я задаю этот (второй вопрос) только в том случае, если стандарт разрешает указателям иметь разный размер.

Подробнее здесь: https://stackoverflow.com/questions/718 ... -size-in-c
Ответить

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

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

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

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

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