gpt4 book ai didi

c++ - 为什么随机访问迭代器的算术运算符接受/返回 int 而不是 size_t?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:33 24 4
gpt4 key购买 nike

由于 std::vector 上的大多数操作都需要/返回 size_t - 这就是我用于索引的类型。但现在我已经启用所有编译器警告来修复一些我知道的有符号/无符号转换问题,这条消息让我感到惊讶:

warning C4365: 'argument' : conversion from 'size_t' to '__w64 int', signed/unsigned mismatch

它是由这段代码生成的:

std::vector<int> v;
size_t idx = 0;
v.insert(v.begin() + idx + 1, 0);

我收到很多其他类似的消息,建议迭代器的算术运算符接受并返回 int。为什么不是 size_t?修复所有这些消息很痛苦,并且不会使我的代码更漂亮!

最佳答案

I've got a lot of other similar messages suggesting that iterator's arithmetic operators accept and return int.

不一定int。它是由迭代器类型的 iterator_traits 定义的(有符号的)difference_type。对于大多数迭代器类型,这默认为 ptrdiff_t

Why not size_t?

因为算术需要正确处理带符号的值;人们会期望 it + (-1) 等同于 it - 1

关于c++ - 为什么随机访问迭代器的算术运算符接受/返回 int 而不是 size_t?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22559499/

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