gpt4 book ai didi

c++ - 递增指向 0 大小的动态数组的指针是否未定义?

转载 作者:行者123 更新时间:2023-12-02 08:43:11 24 4
gpt4 key购买 nike

据我所知,虽然我们无法创建 0 大小的静态内存数组,但我们可以使用动态数组来做到这一点:

int a[0]{}; // Compile-time error
int* p = new int[0]; // Is well-defined

据我所知,p其作用类似于过去的元素。我可以打印 p 的地址指向。

if(p)
cout << p << endl;
  • 虽然我确信我们不能取消引用该指针(过去最后一个元素),就像我们不能使用迭代器(过去最后一个元素)一样,但我不确定是否会增加该指针 p ?未定义行为 (UB) 与迭代器类似吗?

    p++; // UB?

最佳答案

指向数组元素的指针可以指向有效元素,或者指向末尾的元素。如果您以超过一次越过末尾的方式递增指针,则行为未定义。

对于 0 大小的数组,p 已经指向末尾,因此不允许增加它。

有关 + 运算符的信息,请参阅 C++17 8.7/4(++ 具有相同的限制):

f the expression P points to element x[i] of an array object x with n elements, the expressions P + J and J + P (where J has the value j) point to the (possibly-hypothetical) element x[i+j] if 0≤i+j≤n; otherwise, the behavior is undefined.

关于c++ - 递增指向 0 大小的动态数组的指针是否未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58684967/

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