Nei*_*irk 2 c++ language-lawyer
请考虑以下简单代码对数组进行排序.
int myarray[4] = {};
std::sort(myarray, myarray + 4);
Run Code Online (Sandbox Code Playgroud)
我知道创建一个指向C风格数组末尾的指针是有效的.
我最近看过这样的代码:
std::sort(myarray, &myarray[4]);
Run Code Online (Sandbox Code Playgroud)
我不确定这是否有效,因为它取消引用数组边界之外的元素,即使元素值不用于任何东西.
这是有效的代码吗?
A[i]在语法上等同于*(A + i)数组或指针A.
所以,&A[i]在语法上等同于&(*(A + i)).
当*(A + i)没有未定义的行为时,&(*(A + i))将表现得相同A + i.
问题是myarray[4]在语法上等同于*(myarray + 4),从数组的边界取消引用位置.根据标准,这是未定义的行为.
所以,你应该绝对喜欢myarray + 4过&myarray[4]-后者是不确定的行为.
这&myarray[4]具有" 正确 "行为,大多数(如果不是全部)编译器不会根据标准免除未定义的行为.
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |