C++:班级之友和"this"指针
C++ : friends of class and "this" pointer
我有一个小问题要问你:),我知道每个方法"秘密"都会获得它们所在的某个类的">这个"指针,但为什么"朋友"函数不会发生这种情况?是因为它们不是类的方法吗?
谁能解释整个机器,我对"这个"的真正工作原理非常感兴趣!
提前感谢! :)
-
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
指针(。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 关于C++中具有多重继承"this"指针的说明
- Doees the 'this' 指针参与虚函数的多态行为
- 为什么成员函数内的"this"指针为空?
- "this"指针的值在对象的生存期内是否恒定?
- 如何将'this'指针传递给C++ WinAPI 线程?
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 'this'指针是否可以在 c++ 标头声明中使用?
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- C++虚拟方法,不需要"this"指针 - 优化
- 指向成员函数签名的指针中缺少"this"指针
- 是否可以获取'this'指针的地址?
- 静态类成员不是与 this 指针没有关联吗?
- 为什么有必要将"this"指针作为"arg"参数传递给pthread_create
- 编译错误:2 个重载没有'this'指针的合法转换。使用结构
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- Do=在lambda的捕获列表中捕获this指针
- 将"this"指针传递给析构函数中的其他类/函数