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

Ber*_*ler 20 c++ pointers pointer-arithmetic

C++标准[sec 5.7]说:

如果指针操作数和结果指向相同的数组对象,或一个过去的数组对象的最后一个元素的元素两者,所述评估也不得产生溢出; 否则,行为未定义.

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

例如:

int a = 0;
vector<int> v(&a, (&a)+1);
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*rgB 25

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

  • 只是为了确认一下,直到 C++17 仍然是这种情况(碰巧的是,将文本移动到脚注并稍微重写它)。 (2认同)