相关疑难解决方法(0)

通过C++标准的下标:legal来获取一个过去的数组元素的地址?

我已经看过它多次断言现在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

c c++ standards language-lawyer

75
推荐指数
6
解决办法
6741
查看次数

标准引用:超出范围调用`vector :: operator []`是否会调用未定义的行为?

考虑:

#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标准的引用或引用吗?

c++ language-lawyer c++11

2
推荐指数
1
解决办法
247
查看次数

标签 统计

c++ ×2

language-lawyer ×2

c ×1

c++11 ×1

standards ×1