Ref-qualified member functions
От: Videoman Россия https://hts.tv/
Дата: 31.05.23 12:41
Оценка:
Пытаюсь окончательно разобраться с безопасным и быстрым возвратом тяжелых объектов. Правильно ли я понимаю принцип, или можно короче? Есть явные ляпы и ошибки?
Полностью понятный и комплексный пример мне нагуглить не удалось, поэтому обращаюсь к гуру:
#include <iostream>
#include <vector>
#include <string>

struct very_huge_but_fast_movable
{
    void print() const& { std::cout << "size: " << data.size() << " const&\n"; }
    void print() const&& { std::cout << "size: " << data.size() << " const&&\n"; }
    void print() & { std::cout << "size: " << data.size() << " &\n"; }
    void print() && { std::cout << "size: " << data.size() << " &&\n"; }

    std::vector<int> data = std::vector<int>(1000);
};

struct carier
{
    const very_huge_but_fast_movable& get_huge() const& { return m_some; }
    const very_huge_but_fast_movable&& get_huge() const&& { return std::move(m_some); }
    very_huge_but_fast_movable& get_huge() & { return m_some; }
    very_huge_but_fast_movable&& get_huge() && { return std::move(m_some); }

    very_huge_but_fast_movable m_some;
};

int main() 
{
    const carier cstate;
    cstate.get_huge().print();
    
    const_cast<const carier&&>(carier()).get_huge().print();

    carier state;
    state.get_huge().print();

    carier().get_huge().print();

    return 1;
}

size: 1000 const&
size: 1000 const&&
size: 1000 &
size: 1000 &&

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.