Дан код(удалены неотносящиеся к контексту участки кода):
template <typename T>
class BinaryHeap
{
std::byte * buffer;
void siftDown(size_t position)
{
// First snippet
if (reinterpret_cast<T *>(buffer[position * sizeof(T)]) > reinterpret_cast<T *>(buffer[indexOfMin]))
{
}
// ...
// Second snippet: without template, now buffer is int * not sts::byte
if (buffer[position] > buffer[indexOfMin])
{
}
}
}
Правильно ли я понимаю, что скорость обоих участков кода (если в качестве T был бы int), будет одинаковой, так как position * sizeof(T) для byte - смещения в байтах относительно начала buffer, а просто position развернётся в position * sizeof(int) (как смещение) и операция
умножения будет присутствовать в обоих примерах ?