Одинаково ли alignof (T *) для всех возможных типов? А что насчет sizeof (T *)? - PullRequest
3 голосов
/ 05 мая 2020

Является ли alignof(T*) одинаковым значением для всех возможных типов T? А как насчет sizeof(T*)? Пожалуйста, ответьте, основываясь на том, что разрешено / определено стандартом, а не на текущей ситуации в разных компиляторах.

1 Ответ

3 голосов
/ 05 мая 2020

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

Преобразование одного действительного указателя в функцию в другой и обратно гарантирует получение исходное значение. Таким образом, должно быть такое же минимальное количество значений, которые должны быть представлены, что является максимальным количеством допустимых адресов для любого заданного указателя на тип функции, который дает нижнюю границу размера всех указателей на типы функций.

Преобразования между типами объектов имеют аналогичную гарантию, которая, однако, применяется только тогда, когда исходный заостренный тип имеет более строгие или равные требования к выравниванию. Как следствие, указатели объектов на строго выровненные типы требуют меньшего количества представимых значений. Если выравнивание достаточно высокое, тип теоретически может быть меньше. указатели на функции и указатели на void должны быть одинаковыми.

Но даже в этом случае некоторые типы указателей могут быть больше, чем количество представляемых им значений. Эти дополнительные биты просто обязательно не будут использоваться. Это было бы не очень практично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...