21

C++ 标准 [sec 5.7] 说:

如果指针操作数和结果都指向同一个数组对象的元素,或者超过数组对象的最后一个元素,则计算不应产生溢出;否则,行为未定义。

那么,我是否正确假设未定义其他类型的指针,而不是数组?

例如:

int a = 0;
vector<int> v(&a, (&a)+1);

上面的代码片段编译并且工作得很好(使用 g++),但它有效吗?

4

1 回答 1

27

不,这是合法的。5.7(4) - 引用前的一段 - 说:“就这些运算符而言,指向非数组对象的指针的行为与指向长度为 one 的数组的第一个元素的指针相同,对象的类型为它的元素类型。”

于 2013-01-24T16:20:08.113 回答