C++ vector.assign()按顺序指定值

C++ vector.assign()按顺序指定值,c++,c++-standard-library,C++,C++ Standard Library,以下定义是否明确 std::vector<std::string> v{"test"}; v.assign(1, v.at(0)); 评论 如果_Val按顺序排列 这表明 标准明确规定,分配作为 当前序列是格式良好的,或者是纯粹软件的实现 只是想变得聪明;) 它是哪一个?at()返回对容器中现有值的引用。因此,这是未定义的行为 您只需制作一份副本,就可以创建定义良好的行为: v.assign(1, (std::string)v.at(0)); 这是未定义的行为,复制的元素不能来自

以下定义是否明确

std::vector<std::string> v{"test"};
v.assign(1, v.at(0));
评论

如果_Val按顺序排列

这表明 标准明确规定,分配作为 当前序列是格式良好的,或者是纯粹软件的实现 只是想变得聪明;)

它是哪一个?

at()
返回对容器中现有值的引用。因此,这是未定义的行为

您只需制作一份副本,就可以创建定义良好的行为:

v.assign(1, (std::string)v.at(0));

这是未定义的行为,复制的元素不能来自容器本身

[顺序要求]表84(草案n4606)


这是众所周知的。问题是标准是否对这种行为有所说明。我很惊讶,他们不仅编写了
void\u Assign\n(size\u type\u Count,\u Ty val)
,当然VS2010早于C++11。现在你真的不应该在需要拷贝的时候拿一个
const&
。它阻止移动。
v.assign(1, (std::string)v.at(0));