我有一个小问题要问你:),我知道每个方法都“秘密地”获取它们所在类的“ this ”指针,但为什么“朋友”函数不会发生这种情况?是因为它们不是类的方法吗?
谁能解释整个机器,我对“这个”的真正工作原理非常感兴趣!
提前致谢!:)
“友谊”和“会员”是两个不同的东西。函数可以是成员函数,也可以不是成员函数,也可以是友元函数。
您可以将成员函数声明为另一个类的友元函数,即
class B{
friend void A::func(B);
//stuff
};
在这里,A 类的成员函数func
被声明为友元,可以访问 B 的私有函数,并且它会有一个this
指针,指向 A 类的func
已被调用的对象。
this 指针是非静态成员函数的隐式参数,在 C++ 标准的第 9.3.2 节中有描述。它如何传递给函数取决于您的编译器/架构,即它是实现定义的(因此您可能想阅读您最喜欢的编译器的文档以了解它如何管理this
指针)。
friend
函数和类仅用于编译器检查的访问控制。friend
函数只是标准函数,因此在调用约定方面不会有任何差异。friend
函数不是任何类的成员,因此不this
传递指针(与static
成员函数一样)类的非static
成员函数将获得隐藏的this 指针(取决于 ABI,这通常是第一个参数),static
成员函数不会获得 this 指针,因为它们不作用于实例数据。
this 指针如何准确地传递给成员函数在很大程度上取决于使用的 ABI,这取决于架构和操作系统。它要么被压入堆栈,要么通过一个众所周知的寄存器传递。
请考虑阅读“ 'this'指针存储在计算机内存中的什么位置? ”。