如果您有以下代码,其中p是指针:
p = p + strlen(p) + size_t(1);
Run Code Online (Sandbox Code Playgroud)
既然strlen()和size_t都是size_t,我应该把代码转换成ptrdiff_t?
p = p + (ptrdiff_t)(strlen(p) + size_t(1));
Run Code Online (Sandbox Code Playgroud)
如果是这样的话?
谢谢,格雷格
Fré*_*idi 18
std :: ptrdiff_t已签名.std :: size_t是无符号的.铸造strlen(p)于ptrdiff_t才有意义,如果p能有一个负的长度,这是不可能的.
但是,如果p足够大(例如,在大多数32位平台上大于2,147,483,647字节),那么转换可能会溢出结果签名值.所以它可能会在你的指针算术中引入一个错误.
最好坚持在size_t这里.