gpt4 book ai didi

c++ - std::vector::end()[-1] 是未定义的行为吗?

转载 作者:行者123 更新时间:2023-12-05 09:01:15 26 4
gpt4 key购买 nike

std::vector v { 1, 2, 3, 4, };

v.end()[-1]能够访问元素 4。

在很长大约 2 年 的时间里,我使用 *(v.rbegin() + 0) ...

如果我只使用 [-static_cast<int>(v.size()), -1] 范围内的索引,会不会有什么问题? ?

最佳答案

您可以在 LegacyRandomAccessIterator 上使用下标运算符.

i[n]    convertible to reference    *(i + n)

哪里n类型为 std::iterator_traits<It>::difference_type (已签名)。

因此,只要您保持在有效范围内,就可以了。

int main() {
std::vector v { 1, 2, 3, 4, };

for(auto i = -static_cast<std::ptrdiff_t>(v.size()); i < 0; ++i) {
std::cout << v.end()[i] << '\n';
}
}

类型转换可能会溢出。

关于c++ - std::vector::end()[-1] 是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73770185/

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