我有以下代码:
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 的声明中删除引用符号(返回副本而不是引用)在 Visual Studio 2008 中没有区别(关于调用复制的次数)。我猜它会被优化掉——通常它应该首先为返回值制作一个副本,然后再次调用赋值运算符将它分配给变量 sc。
您对不同编译器中的这种优化有何经验?
问候, 泽南