次のコードがあります。
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に割り当てます。
さまざまなコンパイラでのこの種の最適化について、どのような経験がありますか?
よろしく、 ジェナン