C ++:类的朋友和“this”指针

时间:2013-10-10 11:41:34

标签: c++ this friend

我有一个小问题给你:),我明白每个方法都“偷偷”得到某个类的“ this ”指针,但是为什么不会发生在“朋友”函数中? 是因为它们不是阶级方法吗?

任何人都可以解释整个机器,我对“这个”真正起作用非常感兴趣!

提前谢谢! :)

2 个答案:

答案 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指针)。