非数组类型的“一个接一个”指针是否是C ++中的有效概念?

时间:2013-01-24 16:15:48

标签: c++ pointers pointer-arithmetic

C ++标准[sec 5.7]说:

  

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

那么,我是否正确地假设其他类型的指针比数组的结尾未定义?

例如:

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

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

1 个答案:

答案 0 :(得分:25)

不,这是合法的。 5.7(4) - 引用前的一个段落 - 说:&#34;出于这些运算符的目的,指向非阵列对象的指针与指向非阵列对象的指针的行为相同 长度为1的数组的第一个元素,其中对象的类型为其元素类型。&#34;