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的数组的第一个元素的指针的行为相同,对象的类型为它的元素类型."