Является ли хорошей практикой объявление функции как BigStruct&& foo (… ); [закрыто]

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 ().

Итак, мой вопрос::

Должны ли мы всегда объявлять функцию как некую _return _type&& f (... ); вместо некоторого _return _type f (... ); ?

Если ответ на мой вопрос верен, то следует другой вопрос:

Было много много функций, объявленных как некоторые _return _type f (... ); в мире C++, должны ли мы изменить их на современную форму?

0
задан Benjamin 27 December 2013 в 14:29
поделиться