Proposal 显示奇怪的地图API使用:
这使得非常高效的工厂成为可能 元素
auto new_record()
{
table_type table;
table.emplace(...); // Create a record with some parameters.
return table.extract(table.begin());
}
table.insert(new_record());
假设记录是可移动的(因此从函数返回它并不是非常昂贵)这个代码是否有意义?
答案 0 :(得分:2)
这只是一个展示如何创建元素并在不复制(或移动)的情况下返回元素的示例,它并不意味着生产代码可以做一些真实的事情。
如果您看不到示例的要点,请假设table
不是局部变量,而是某些可能已包含某些值的全局变量:
table_type table;
auto insert_record_and_take_first(const Foo& foo, const Bar& bar, const Baz& baz)
{
table.emplace(foo, bar, baz); // Create a record with some parameters.
return table.extract(table.begin()); // Remove first
}
table.insert(insert_record_and_take_first());
如果记录类型不可移动,则无法进行此操作。即使它是可移动的,这样做也可能更有效率。
假设记录是可移动的(因此从函数返回它并不是非常昂贵)这个代码是否有意义?
pair<const X, Y>
可移动吗?你如何从const键移动?
当你只能获得const迭代器到元素时,如何从std::set
元素移动?