小编abi*_*abi的帖子

C++数组可以在内存边界结束吗?

C++标准(和C就此而言)允许创建(而不是取消引用)指向超过数组末尾的一个元素的指针.这是否意味着永远不会在最后一个元素在内存边界结束的位置分配数组?我理解在实践中,部分/全部实现可能遵循此约定,但以下哪一项是正确的:

  1. 它实际上是假的,并且数组可能在内存边界处结束,或者
  2. C++标准要求在边界之前结束至少一个元素的内存,OR
  3. 既不是1,也不是2,但在实际编译器中仍然如此,因为它使实现更容易.

C的情况有什么不同吗?

更新: 似乎1是正确的答案.请参阅下面的James Kanze的答案,并且还可以看到efence(http://linux.die.net/man/3/efence-感谢Michael Chastain指向它的指针)

c c++ arrays c++11

32
推荐指数
2
解决办法
2010
查看次数

当f&g修改相同的全局变量undefined或unspecified时,表达式f()> g()的值是多少?

更新:由用户ecatmur标记,它是In C99的副本,f()+ g()未定义或仅仅未指定?(虽然问题询问C99,但C++的答案没有变化).答案是:未指定(两种情况).


考虑以下C++ 14代码片段:

int i = 0;
int x() { i++; return i;}
int y() { i++; return i;}
bool z = (x() > y());  // unspecified or undefined ?
Run Code Online (Sandbox Code Playgroud)

z 仅仅是未指定的值,还是这种未定义的行为?

根据我的理解(请纠正,如果我错了),这种类型的表达式:i++ > i++将是未定义的行为,因为我们在一对序列点之间两次改变相同的变量,但是上面的情况如何(突变发生在单独的功能) ?

那一个怎么样:

bool z = (x() > i++);  // undefined or unspecified now ?
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14 c++17

9
推荐指数
1
解决办法
383
查看次数

标签 统计

c++ ×2

c++11 ×2

arrays ×1

c ×1

c++14 ×1

c++17 ×1