Ita*_*iwa 32 c++ pointers undefined-behavior dynamic-arrays
AFAIK,尽管我们无法创建大小为0的静态内存数组,但是我们可以使用动态数组来做到这一点:
int a[0]{}; // Compile-time error
int* p = new int[0]; // Is well-defined
Run Code Online (Sandbox Code Playgroud)
如我所读,p行为就像一个过去的元素。我可以打印p指向的地址。
if(p)
cout << p << endl;
Run Code Online (Sandbox Code Playgroud)
尽管我确定我们不能像使用迭代器(过去元素)那样取消引用该指针(过去元素),但是我不确定是否要增加该指针p?是否像迭代器一样具有未定义的行为(UB)?
p++; // UB?
Run Code Online (Sandbox Code Playgroud)int*_*jay 31
指向数组元素的指针可以指向有效元素,也可以指向末尾。如果以超过末尾一个以上的方式递增指针,则该行为是不确定的。
对于大小为0的数组,p已经指向末尾一个,因此不允许对其进行递增。
有关+运算符,请参见C ++ 17 8.7 / 4 (++具有相同的限制):
f表达式
P指向具有n个元素x[i]的数组对象的x元素,如果0?i + j?n ,则表达式P + J和J + P(其中J的值是j)指向(可能是假设的)元素x[i+j];否则,行为是不确定的。
| 归档时间: |
|
| 查看次数: |
1707 次 |
| 最近记录: |