rvalue , 1 , , , ( ).
vector , move vector .
, .
std::vector<int> data[1000];
void populate_data() {
for( auto& v : data )
v.resize(1000);
}
template<std::size_t N>
std::vector< std::vector<int> > get_data( std::vector<int>(&&arr)[N] ) {
std::vector< std::vector<int> > retval;
retval.reserve(N);
for( auto& v : arr )
retval.emplace_back( std::move(v) );
return retval;
}
template<std::size_t N>
std::vector< std::vector<int> > get_data( std::vector<int>(const&arr)[N] ) {
std::vector< std::vector<int> > retval;
retval.reserve(N);
for( auto const& v : arr )
retval.emplace_back( v );
return retval;
}
int main() {
populate_data();
auto d = get_data(data);
auto d2 = get_data( std::move(data) );
}
, move d . rvalue -, move d ( rvalue) .
, . , rvalue (aka owning range), , move . .
1 , "" , , , , . ( , ++ 11 pre-++ 11, ). rvalue cast. , , " ", , , rvalue "" , . rvalue swap , , , .