я следующий код:Copy оптимизация метод составителей
void Stack::operator =(Stack &rhs)
{
//do the actual copying
}
Stack::Stack(Stack &rhs) //copy-constructor
{
top=NULL; //initialize this as an empty stack (which it is)
*this=rhs; //invoke assignment operator
}
Stack& Stack::CopyStack()
{
return *this; //this statement will invoke copy contructor
}
Он используется так:
unsigned Stack::count()
{
unsigned c=0;
Stack copy=CopyStack();
while (!copy.empty())
{
copy.pop();
c++;
}
return c;
}
Удаление опорного символа из декларации CopyStack (возвращает копию вместо ссылки) не имеет никакого отношения к визуальной студии 2008 (в отношении количества раз, когда копируется вызов). Я думаю, что он оптимизирован - обычно он должен сначала сделать копию для возвращаемого значения, а затем оператор назначения вызова еще раз назначить переменную sc.
Как вы относитесь к такой оптимизации в разных компиляторах?
С уважением, Dženan
Кроме того, ваш конструктор копирования и 'operator =' должны принимать ссылки 'const'. – Thomas
На самом деле это была очень простая домашняя работа - класс из 119 строк реализации. Каждый метод вызывается не более нескольких раз, и он никогда не будет расширяться. Причина для этого - количество внимания, которое он получает в учебниках на C++. Производительность не вызывает беспокойства в этой программе - стек копирования реализуется с использованием только push и pop-методов, что делает его превосходно неэффективным. И счет мог быть сохранен в качестве частной переменной в первую очередь и т. Д. –
Итак, на ваш вопрос: «На практике ли компиляторы исключают временные значения в определениях, которые используют инициализацию копирования?», Поскольку комментарий в коде _seems_ to показать недоразумение о ссылках в качестве возвращаемых значений. –