Re[10]: Безопасно ли присваивать один указатель другому?..
От: SaZ  
Дата: 30.03.18 11:48
Оценка:
Здравствуйте, Croessmah, Вы писали:

C>Здравствуйте, SaZ, Вы писали:


SaZ>>Я вообще к чему это всё — в техникуме нас учили языку Си. С тех пор я как-то привык что в void* можно положить любой указатель. И был удивлён, что это не так.


C>К слову, в C даже указатель на функцию нельзя преобразовывать в указатель на данные (в т.ч. в void*). Такое преобразование является возможным, но имеет неопределенный результат и не является переносимым. Но, например, POSIX требует чтобы такое преобразование было валидным.


Я правильно понял, что стандарт никак не обязует компиляторы использовать какой-то фиксированный размер указателя для определённого типа данных? Т.е. чисто теоретически возможна ситуация, когда
struct A // ...
{
  virtual void f(){}
};
struct B // ...
{
  virtual void f(){}
};

sizeof( &A::f ) != sizeof( &B::f ); // ?


В общем, если делать свою интроспекцию, то надо делать отдельные типы для хранения 1) указатели на поля, 2) указатели на методы, 3) указатели на виртуальные методы, 4) что-то ещё?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.