gpt4 book ai didi

c++ - std::vector 是一个非常规类型,因为它的赋值运算符移动了它的成员的位置

转载 作者:行者123 更新时间:2023-11-30 02:23:36 26 4
gpt4 key购买 nike

<分区>

vector 以一种方式包装它的数组,它假装数组的元素是 vector 本身的成员。这就是为什么不能修改 const vector 的数组元素的原因。该 vector 还允许您访问其数组元素的地址。但是,如果我得到一个指向 vector 的数组元素的指针(它是 vector 本身的一个元素),然后我分配给 vector ,我的指针就不再定义为指向 vector 的一个元素。 push_back() 或类似的东西使指针无效是有意义的,因为没有人说 push_back() 没有对 vector 的元素做一些荒谬的事情.

任何常规类型都会让我指向其元素的指针在赋值后保持有效。所以,并不是说没有变通办法,而是说这不会使 vector 成为非常规类型吗?

std::string 和标准中的许多其他列表/存储类型也是如此。

已编辑:当我说具体类型时,指的是常规类型。

编辑,还有一点:所以,在 c 中,如果你得到一个指向结构成员的指针,分配给该结构实际​​上不能改变对象的位置,因为你不能假装一个数组元素成为结构的一部分。然而,在 vector 中,这个规则被打破了。成员是对象的成员,因为它从字面上与相同的对象名称相关联,并且在对象被销毁之前一直如此。因此,任何常规操作都不应该能够改变这样的事情。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com