C++ 输入输出流运算符重载为什么用友元函数
270 字
1 分钟
C++ 输入输出流运算符重载为什么用友元函数
今天是朝鲜主体历114年5月14日 (喜)
说正事,马上就到期末周了,C++ 已经结课有一段时间了,这两天在复习 C++ 的基础知识。复习到运算符重载,我发现对输入输出流的重载都用友元函数,记得当时学的时候就有点疑惑,但是也没有深究。现在有时间了,我好好研究了一下。
为什么不能用普通成员函数?
当运算符重载为成员函数时,this指针会被隐式绑定到左操作数。例如:
class A {public: bool operator==(const A& rhs) const; // 等价于 bool A::operator==(const A* this, const A& rhs)};a == b; // 实际调用 a.operator==(b), 即 operator==(&a, b)因此,成员函数重载的运算符左操作数必须是类的实例。但流运算符的左操作数是std::ostream/std::istream,这与成员函数的绑定规则冲突。
显而易见,使用友元函数是最优解。
class Person {private: std::string name;public: friend std::ostream& operator<<(std::ostream&, const Person&);};
std::ostream& operator<<(std::ostream& os, const Person& p) { os << p.name; return os;}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
C++ 输入输出流运算符重载为什么用友元函数
https://blog.blackcyan.top/posts/cpp-io-operator/相关文章智能推荐
1
树莓派 4B OpenCV 交叉编译完整指南(Linux + Docker)
技术在 x86 Linux 上为树莓派 4B 配置 OpenCV C++ 交叉编译环境的完整教程,涵盖根文件系统同步、交叉工具链配置、Docker 容器化方案及 CMake 集成。
2
Fedora 启用 ntfs3 内核驱动提升 NTFS 读写性能
技术在 Fedora 上启用 Linux 内核原生 ntfs3 驱动以替代 ntfs-3g,大幅提升 NTFS 移动硬盘读写速度,包含内核模块检查、mount 配置及双系统注意事项。
3
Sipeed 麦克风阵列声源定位:MicroPython 获取声源角度
技术使用 Sipeed MicArray 麦克风阵列模块进行声源定位(DOA),通过 MicroPython / MaixPy 获取声源方向角度并驱动 RGB LED 显示,附官方示例代码。
4
Kruskal 与 Prim 最小生成树算法详解(Kotlin 实现)
技术图论经典算法 Kruskal 和 Prim 求解最小生成树(MST)的原理与 Kotlin 实现,包含贪心策略、并查集、邻接矩阵等核心知识点。
5
高斯-约旦消元法的 Kotlin 实现:矩阵行最简形式与秩的计算
技术使用 Kotlin 实现高斯-约旦消元法(Gauss-Jordan Elimination),将矩阵化为行最简阶梯形矩阵(RREF),并计算矩阵的秩,附完整代码。
随机文章随机推荐



湘公网安备43130202000333号