【发布时间】:2014-10-10 00:08:32
【问题描述】:
考虑以下简单代码对数组进行排序。
int myarray[4] = {};
std::sort(myarray, myarray + 4);
我知道创建一个指向 C 样式数组末尾之后的指针是有效的。
我最近看到过这样的代码:
std::sort(myarray, &myarray[4]);
我不确定这是否有效,因为它取消引用数组边界之外的元素,即使元素值没有用于任何事情。
这是有效的代码吗?
【问题讨论】:
-
Discussed in depth here 。 C++ 的结论似乎是 C++03 标准不清楚它是否有效。 (这个线程出现在 C++11 完成之前)。
-
@MattMcNabb:C++14 包含它吗?
-
这个问题已经存在多年了,是时候让 CWG 中的某个人一劳永逸地解决它了 >.>
-
@BenVoigt 请注意(a)该问题是在 C++11 之前解决 DR232 的问题,并且(b)接受的答案是错误的。
-
@BenVoigt 他从一些不相关的标准引用开始,然后做出完全没有根据的结束声明“在我看来,这似乎暗示是的,你可以合法地取消引用它,但是阅读或写入的结果位置未指定。”。
标签: c++ language-lawyer