gpt4 book ai didi

c++ - 将 int 添加到 size_t 的正确方法

转载 作者:行者123 更新时间:2023-11-30 03:14:21 29 4
gpt4 key购买 nike

我收到关于以下代码的 Clang 警告“隐式转换更改签名”:

size_t x = 10;
int y = -1;
x += y;

x 是 std::vector 的索引,因此它应该是一个 unsigned long long(又名 size_t)是有道理的,但 y 是一个偏移量这可能是积极的或消极的,因此需要签名。我可以将 y 转换为 size_t 以消除警告并产生正确的结果,但这似乎不正确,因为转换为值肯定不再等于 -1。那么,有没有合适的方法将负数加到 size_t 上?

最佳答案

this doesn't seem correct because the cast-to value is definitely not equal to -1 anymore.

就相加的结果而言,不再是-1也没关系。它仍然与 -1 模 M 1 全等,因此无符号加法的结果正确。

1 M 是可表示值的数量。

So, is there a proper way to add a negative number to a size_t?

您可以完全按照示例中的操作进行操作。是对的。

如果你想让警告保持启用状态,并且想让它静音,那么你可以进行显式转换。但这实际上更容易出错,因为如果您不小心转换为错误的无符号类型(这可能由于重构而发生),则上述假设不再成立。因此,您还应该避免将转换后的无符号值存储在中间变量中。我建议您不要启用有问题的警告选项。


如评论中所述,由于您使用的是 size_t,因此您可能需要考虑使用 ptrdiff_t 作为偏移类型,这样您就可以对任何索引进行偏移.

更合适的方法是使用 vector::size_typevector::difference_type 索引 vector,尽管在​​实践中它们可能与 size_tptrdiff_t 相同。

关于c++ - 将 int 添加到 size_t 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896527/

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