4

我有一个小问题要问你:),我知道每个方法都“秘密地”获取它们所在类的“ this ”指针,但为什么“朋友”函数不会发生这种情况?是因为它们不是类的方法吗?

谁能解释整个机器,我对“这个”的真正工作原理非常感兴趣!

提前致谢!:)

4

2 回答 2

2

“友谊”和“会员”是两个不同的东西。函数可以是成员函数,也可以不是成员函数,也可以是友元函数。

您可以将成员函数声明为另一个类的友元函数,即

class B{

   friend void A::func(B);
   //stuff
};

在这里,A 类的成员函数func被声明为友元,可以访问 B 的私有函数,并且它会有一个this指针,指向 A 类的func已被调用的对象。

this 指针是非静态成员函数的隐式参数,在 C++ 标准的第 9.3.2 节中有描述。它如何传递给函数取决于您的编译器/架构,即它是实现定义的(因此您可能想阅读您最喜欢的编译器的文档以了解它如何管理this指针)。

于 2013-10-10T12:03:34.473 回答
2
  • friend函数和类仅用于编译器检查的访问控制。
  • friend函数只是标准函数,因此在调用约定方面不会有任何差异。
  • friend函数不是任何类的成员,因此不this传递指针(与static成员函数一样)

类的非static成员函数将获得隐藏的this 指针(取决于 ABI,这通常是第一个参数),static成员函数不会获得 this 指针,因为它们不作用于实例数据。

this 指针如何准确地传递给成员函数在很大程度上取决于使用的 ABI,这取决于架构和操作系统。它要么被压入堆栈,要么通过一个众所周知的寄存器传递。

请考虑阅读“ 'this'指针存储在计算机内存中的什么位置? ”。

于 2013-10-10T11:53:53.780 回答