return *reinterpret_cast<UInt32*>((reinterpret_cast<char*>(this) + 2));
Структура упакована прагмой 1 и содержит кучу полей uint, char, short...
Поскольку это UInt32, следует ли сначала переинтерпретировать_приведение к беззнаковому char* вместо этого или это вообще имеет значение?
Кроме того, скорость здесь имеет решающее значение, и я считаю, что reinterpret_cast является самым быстрым из приведений, в отличие от static_cast.
РЕДАКТИРОВАТЬ: структура фактически состоит из двух однобайтовых полей, за которыми следует объединение примерно 16 других структур, 15 из которых имеют UInt32 в качестве первого поля. Я быстро проверяю, что это не тот, у которого нет, а затем делаю переинтерпретацию_приведения к смещению в 2 байта.
reinterpret_cast
медленнее, чемstatic_cast
. - person Nawaz   schedule 29.06.20112
? Если это переменная, содержащая известное смещение членаUint32
структуры, но во время выполнения это будет другой член в соответствии с некоторым свойством времени выполнения, то, возможно, вместо этого вы могли бы использовать указатель на член. Если вы читаете какую-то смесь различных данных в стиле ASN.1, которая сообщает вам смещения различных битов самой себя, то переносимый способ подобрать 4-байтовое целое число — это по одному байту за раз, сдвиг и ИЛИ. Если вы хотите быстро, вам нужно сделать что-то конкретное для реализации.UInt32
выглядит Windows-ой, но кто его знает. - person Steve Jessop   schedule 29.06.2011