10 举个例子: string s = "123"; s.assign(find(s.begin(),s.end(),'2'), s.end()); 是否定义了上述代码的行为?还是导致不确定的行为? c++ — 阿塔沃 source
5 是。此版本的assign 定义为 template<class InputIterator> constexpr basic_string& assign(InputIterator first, InputIterator last); 约束条件:InputIterator是一种有资格作为输入迭代器的类型。 效果:等效于:return Assign(basic_string(first,last,get_allocator())); 它显示了在更改发生之前计算的临时值。 — 程序员 source “等于”并不意味着必须创建实际的临时文件。但是,语义必须相同。并且由于所示版本可以安全地进行自我分配,因此实际实施也必须如此。 — MSalters, @MSalters。同意 我打算对此发表评论,然后在尝试确定可以减少多少分配器使用时迷失了方向。 — AProgrammer 请注意,这特定于字符串。例如,对于矢量,它将是UB。 — TC @TC,您能引用标准吗? — 阿德勒 1 @Adler,见该表到的矢量描述参照。 — AProgrammer