Тема в целом говорит все. В основном в такой ситуации:Эффективные последствия & p [0] против p.get() в boost :: scoped_array
boost::scoped_array<int> p(new int[10]);
есть ли заметная разница в производительности между выполнением: &p[0]
и p.get()
?
Я спрашиваю, потому что я предпочитаю первый, он имеет более естественный указатель, такой как синтаксис. Фактически, это делает так, чтобы вы могли заменить p на собственный указатель или массив и не должны ничего менять.
Я предполагаю, так как получите это один лайнер «return ptr;
», что компилятор будет встраивать, и я надеюсь, что он достаточно умен, чтобы встраивать operator[]
таким образом, что он способен не разыменования, а затем сразу же ссылки ,
Кто-нибудь знает?
Я посмотрел на источник, оператор [] в основном просто выполняет «return ptr [i];» (есть некоторые утверждения, но это важный код). Мой вопрос заключается в том, что компилятор достаточно умен, чтобы знать, что & ptr [0] == ptr в этом случае используется функция operator []. – 2008-11-07 22:50:03
Вы спрашиваете, достаточно ли укомплектован компилятор для оптимизации «ptr + 0». Проверьте выходные данные вашего компилятора. – 2008-11-07 22:53:25
Хе-х, вы могли бы просто сказать «я не знаю» :-P. Во всяком случае, я знаю, может ли p быть родным указателем. Я полагаю, что если параметр оператора [] известен во время компиляции, он * должен * иметь возможность учитывать все это. Интересно, не так ли. – 2008-11-07 22:58:27