Псевдоним переменной с использованием константной ссылки

Когда имеешь дело с T экземпляры, полученные из массива или через любой другой длинный синтаксис, я часто использую const T& псевдоним объекта и сделать мой код более читабельным (конечно, только если время жизни объекта позволяет это). Я видел это в другом месте, например Вот в отличном блоге Стефана Рейналтера. Разобранная и прокомментированная версия его кода:

void Render()
{
for (size_t i = 0; i < m_visibleSubMeshes.size(); ++i)
{
// Get current submesh from array and create alias
const SubMesh& sm = m_subMeshes[i];

// Enjoy shortened syntax using the const reference
context->Draw(sm.startIndex, sm.numIndices);
}
}

Приводит ли это когда-либо к дополнительным инструкциям или при любых обстоятельствах будет таким же, как доступ к m_subMeshes[i].startIndex а также m_subMeshes[i].numIndices напрямую?

1

Решение

Это зависит от конфигурации.

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

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

2

Другие решения