举个例子:
string s = "123";
s.assign(find(s.begin(),s.end(),'2'), s.end());
Run Code Online (Sandbox Code Playgroud)
上面代码的行为是否定义?或者它会导致未定义的行为?
是的。这个版本的assign被定义为
Run Code Online (Sandbox Code Playgroud)template<class InputIterator> constexpr basic_string& assign(InputIterator first, InputIterator last);约束: InputIterator 是一种有资格作为输入迭代器的类型。
效果:相当于: return assign(basic_string(first, last, get_allocator()));
它显示了在发生变化之前计算的临时值。