我无法从字符串创建 vector 。有人可以解释以下4种情况之间的区别吗?根据cplusplus.com,出于相同的奇怪原因,我希望Case 1Case 2一样工作,但事实并非如此。

typedef std::vector<uint8_t> uint8vec_t;

std::string keySecret ()
{
    return std::string ("SomeSecret");
}

情况1
// throws std::bad_alloc
uint8vec_t vSecret (keySecret ().begin (), keySecret ().end ());

情况二
// results in a vector with strange length
uint8vec_t vSecret (keySecret ().begin (), keySecret ().begin () + keySecret ().length ());

情况3
// throws std::bad_alloc
uint8vec_t vSecret (&keySecret ()[0], &keySecret ()[keySecret ().length ()]);

案例4
// throws std::bad_alloc
uint8vec_t vSecret (&keySecret ()[0], &keySecret ()[0] + keySecret ().length ());

最佳答案

它们都是不好的,在第二种情况下,您只是碰巧得到了看起来正确的行为。问题在于keySecret每次都会返回不同的std::string对象。您不能在一个上调用begin而在另一个上调用end并期望它们以任何方式相关。

您应该改为一次调用keySecret,进行本地复制,然后在该单个本地对象上调用beginend

10-04 11:06