我已经看过它多次断言现在C++标准不允许使用以下代码:
int array[5];
int *array_begin = &array[0];
int *array_end = &array[5];
Run Code Online (Sandbox Code Playgroud)
&array[5]在这种情况下是合法的C++代码吗?
如果可能的话,我想要一个参考标准的答案.
知道它是否符合C标准也很有趣.如果它不是标准的C++,为什么决定做出从不同的治疗呢array + 5还是&array[4] + 1?
考虑:
#include <vector>
int main()
{
std::vector <int> v;
v.reserve (100);
v[1] = 42;
}
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码调用了未定义的行为,因为在调用站点v[1],根据的向量大小v.size()是<1.(它是零.)
但是,我花了大约一小时左右的时间来查看C++标准,以便直接或间接地澄清这实际上是未定义的行为.
也许我错过了显而易见的事.你能提供至少C++ 03以及可选的C++ 11标准的引用或引用吗?