考慮下面的程序:std :: move()使迭代器失效嗎?
struct list_wrapper
{
std::vector<int> m_list;
};
int main()
{
std::vector<int> myList { 1, 1, 2, 3, 5 };
const std::vector<int>::iterator iter = myList.begin();
list_wrapper wrappedList;
wrappedList.m_list = std::move(myList);
// Can I still dereference iter?
return 0;
}
調用std::move(myList)
後,不iter
現在指向一個有效的項目裏面wrappedList.m_list
,或做move構造函數/賦值無效所有迭代器?
'的std :: move'確實對自己什麼都沒有。雖然這個移動任務無疑會使迭代器無效。 – user2357112
也許這個質量保證會幫助:http://stackoverflow.com/questions/3413470/what-is-stdmove-and-when-should-it-be-used?rq=1 –
@ user2357112 [其實...]( http://eel.is/c++draft/container.requirements.general#12)(相關的段落在n3337中相同,僅在[container.requirements.general]/11而不是12)。 – jaggedSpire