class A
{
public:
A()
{
cout << "A()" << endl;
}
A(const A&)
{
cout << "A(const A&)" << endl;
}
A(A&&)
{
cout << "A(A&&)" << endl;
}
A& operator=(const A&)
{
cout << "A(const A&)" << endl;
}
A& operator=(A&&)
{
cout << "A(const A&&)" << endl;
}
~A()
{
cout << "~A()" << endl;
}
};
A&& f_1()
{
A a;
return static_cast<A&&>(a);
}
A f_2()
{
A a;
return static_cast<A&&>(a);
}
int main()
{
cout << "f_1:" << endl;
f_1();
cout << "f_2:" << endl;
f_2();
}
出力は次のとおりです。
f_1:
A()
~A()
f_2:
A()
A(A&&)
~A()
~A()
サンプルコードは、f_1()がf_2()よりも効率的であることを明らかに示しています。
だから、私の質問は:
関数を常にsome_return_type&&f(...);として宣言する必要があります。some_return_typeの代わりにf(...); ?
私の質問に対する答えが正しい場合、別の質問が続きます。
some_return_type f(...);として宣言された多くの関数があります。C ++の世界では、それらを最新の形式に変更する必要がありますか?