В приведенном ниже примере кода я выделяю некоторые экземпляры struct Chunk. В циклах for я затем перебираю блок памяти и получаю доступ к различным экземплярам с помощью указателя или ссылок и назначаю им некоторые случайные данные.Какая скорость, доступ к указателю или доступ к ссылке?
Но какой цикл будет выполняться быстрее всего? По моим сведениям, я бы сказал, что эталонный цикл будет самым быстрым, потому что он не требует разыменования и имеет прямой доступ к экземпляру в памяти. Как я ошибаюсь/прав?
struct Chunk {
unsigned int a;
float b;
const char* c;
};
int main() {
Chunk* pData = new Chunk[8];
for(unsigned int i = 0; i < 8; ++i) {
Chunk* p = &pData[i];
p->a = 1;
p->b = 1.0f;
p->c = "POINTERS";
}
for(unsigned int i = 0; i < 8; ++i) {
Chunk& r = pData[i];
r.a = 1;
r.b = 1.0f;
r.c = "REFERENCES";
}
delete [] pData;
return 0;
}
Зависит от вашего компилятора, я думаю, но с моим они скомпилируются по тому же самому коду. Большинство разработчиков C++ предпочитают ссылки в качестве стиля. –
Помните, что ссылка похожа на указатель с автоматической привязкой. – tadman
@tadman Не соответствует стандарту. –