От: | 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 &&