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++ 世界中,我们应该将它们更改为现代形式吗?