首页 > 后端开发 > C++ > 正文

C 17中不指向字符数组时指针加法是否未定义?

Linda Hamilton
发布: 2024-11-11 11:48:03
原创
475 人浏览过

Is Pointer Addition Undefined When Not Pointing to a Character Array in C  17?

当指针不指向字符数组时,指针加法是否未定义?

C 17 标准规定,将整数值添加到指针会导致与操作数类型相同的指针,如果操作保持在数组范围内,则结果指向数组中的(假设的)元素。然而,目前尚不清楚这是否适用于不指向 char 数组的指针。

考虑以下代码:

struct Foo {
    float x, y, z;
};

Foo f;
char *p = reinterpret_cast<char *>(&f) + offsetof(Foo, z); // (*)
*reinterpret_cast<float *>(p) = 42.0f;
登录后复制

标有 (*) 的行是否构成未定义行为 (布)?指针 p 指向浮点数,而不是字符数组。根据引用的段落,这应该导致 UB。然而,如果它是 UB,它将显着限制 offsetof() 的实用性。

普通可复制类型的标准定义指出,可以使用 std::memcpy 等函数将其底层字节复制到 char 数组中。这意味着应该为指向构成对象的原始字节的指针定义加法,无论结果是否用于将字节复制到数组中。

这是否意味着所涉及的字节已经形成数组或构成对运营商通常规则的特殊例外尚不清楚。然而,任何一种解释都会使代码中的添加有效。因此,可以得出结论,添加到 char * 指针并不一定会导致 UB,即使它不指向 char 数组。

以上是C 17中不指向字符数组时指针加法是否未定义?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板