我有一个小问题给你:),我明白每个方法都“偷偷”得到某个类的“ this ”指针,但是为什么不会发生在“朋友”函数中? 是因为它们不是阶级方法吗?
任何人都可以解释整个机器,我对“这个”真正起作用非常感兴趣!
提前谢谢! :)答案 0 :(得分:2)
friend
函数和类仅用于编译器检查的访问控制。friend
函数只是标准函数,因此调用约定不会有任何差异。friend
函数不是任何类的成员,因此不会传递this
指针(与static
成员函数一样)类的非static
成员函数将获得隐藏此指针(取决于ABI,这通常是第一个参数),static
成员函数don'得到这个指针因为它们不对实例数据起作用。
此指针传递给成员函数的确切程度在很大程度上取决于使用的ABI,这取决于体系结构和操作系统。它将被推入堆栈,或者它将通过一个众所周知的寄存器。
请考虑阅读“Where is the 'this' pointer stored in computer memory?”。
答案 1 :(得分:2)
“友谊”和“会员”是两回事。函数可以是成员函数,也可以不是函数函数,也可以不是朋友函数。
您可以将成员函数声明为另一个类的友元函数,即
class B{
friend void A::func(B);
//stuff
};
这里,来自A类的成员函数func
被声明为朋友,可以访问B的私有,它将有一个this
指针,指向A类的对象{{1}已经调用了1}}。
this指针是非静态成员函数的隐式参数,在C ++标准的9.3.2节中有描述。传递给函数的方式取决于您的编译器/体系结构,即它是实现定义的(因此您可能希望阅读您喜欢的编译器文档以了解它如何管理func
指针)。