这是代码。
#include <iostream>
using namespace std;
int w=0;
class A{
int k,n;
public:
int z;
A(){w+=3; k=3+w; n=4+w; z=w;}
A *fun1(){z=k*n; return this;}
A *fun2(){z=n*k; return this-1;}
friend int fun (A *a,int &b);
};
int fun(A *a,int &b)
{ b=a->z+=4;
return a->k+a->n;
}
int main()
{ int m;
A a[2];
cout<<fun(a[1].fun1(),m)<<"\n";
cout<<m<<"\n";
cout<<fun(a[1].fun2(),m)<<"\n";
cout<<m<<"\n";
cout<<a[0].z+a[1].z<<"\n";
return 0;
}
当返回此-1时,它意味着什么?这是否意味着返回的对象是[0]?我无法理解.. 谢谢!
答案 0 :(得分:3)
与任何指针一样,从this
减去1假设*this
是数组的元素,给出数组中前一个对象的地址。在A::fun2()
中有一个隐含的假设,*this
是一个数组的元素,并且该数组中至少有一个前面的元素。
因此,在您的示例代码中,a[1].fun2()
会返回a[0]
的地址。即&a[0]
。
a[0].fun2()
会返回一个等于&a[-1]
的(指针)值。从概念上讲,这是指向不存在的对象的指针。在this-1
中计算A::fun2()
会产生未定义的行为,就像在a-1
中计算main()
一样。这种未定义行为的一个常见(但不是保证)实际症状是程序在以后解除引用指针时崩溃。
答案 1 :(得分:-3)
fun2(){z = n k;返回this-1;}
'this'是一个自引用指针。你不能从中减去1。 然后它将指向一个位于“this”指针
之前的内存位置