gpt4 book ai didi

C++ size_t 或 ptrdiff_t

转载 作者:可可西里 更新时间:2023-11-01 15:40:29 29 4
gpt4 key购买 nike

如果您有以下代码,其中 p 是一个指针:

p = p + strlen(p) + size_t(1);

由于 strlen()size_t 都是 size_t,我应该将代码转换为 ptrdiff_t 吗?

p = p + (ptrdiff_t)(strlen(p) + size_t(1));

如果是,为什么?

谢谢,格雷格

最佳答案

std::ptrdiff_t已签署。 std::size_t未签名。如果 p 可能有负长度,则将 strlen(p) 转换为 ptrdiff_t 是有意义的,这是不可能的。

但是,如果 p 足够大(例如,在大多数 32 位平台上大于 2,147,483,647 字节),则该转换可能会溢出生成的有符号值。所以它可能会在您的指针算法中引入错误。

最好在此处坚持使用 size_t

关于C++ size_t 或 ptrdiff_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377308/

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