6
我感到有点犯难标准管辖本案例:的std ::移动和映射分配
struct Foo {
Foo & operator = (std::string xxx)
{
x = std::move(xxx);
return *this;
}
std::string x;
};
std::map<std::string, Foo> bar;
std::string baz = "some string";
bar[baz] = std::move(baz);
能之前,它是用来初始化并获得参考元素编译器产生的代码,以便baz
将被移动在bar
(初始化std::string xxx
)?或者是这个代码安全,没有未定义的行为?
这不是UB,但不能保证正常工作,无论是。 –
请参阅[本](http://coliru.stacked-crooked.com/a/5ef8993192148d84)简化版代码。 'std :: map'和赋值运算符不需要参与这种情况发生,并且它们的存在不会改变代码的基本问题。 – Mankarse
@Mankarse,是的,的确,一切都可以归结为这种情况 – GreenScape