C++:班级之友和"this"指针

C++ : friends of class and "this" pointer

本文关键字:this 指针 C++      更新时间:2023-10-16

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

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

提前感谢! :)

  • friend函数和类仅用于编译器检查的访问控制。
  • friend函数只是标准函数,因此在调用约定方面不会有任何差异。
  • friend函数不是任何类的成员,因此不会传递this指针(就像static成员函数一样(

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

如何将此指针传递到成员函数在很大程度上取决于使用的 ABI,而 ABI 取决于体系结构和操作系统。它要么被推送到堆栈上,要么通过一个众所周知的寄存器。

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

">

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

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

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

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

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