gpt4 book ai didi

c++ - 如何使用 RHS 上的引用指针重载 operator<<?

转载 作者:行者123 更新时间:2023-12-04 12:28:48 25 4
gpt4 key购买 nike

我试图了解如何使用 RHS 上的指针变量正确重载运算符 << 使用引用参数 .这是一个示例代码:

#include <iostream>
using namespace std;

class A
{
public:
void print(ostream& out) const { out << "Hello World!"; }
};

ostream& operator<<(ostream& out, const A*& handle)
{
handle->print(out);
return out;
}

int main() {
A *a = new A();
cout << a << endl;
delete a;
}
我假设结果应该是 Hello World! .相反,程序打印对象的地址 a 0x7f9bc6405be0 ,很明显 cout << a没有调用我的重载函数。
谁能解释为什么我对重载<<的定义没有按我预期的那样工作?

最佳答案

我猜——本着类似重载函数的精神——你试图让你的参数成为 常量引用 .也就是说,对 const 对象的引用。
您的参数:

 const A*& handle
不是 一个常量引用。它是一个(引用 & )到一个(可变指针 * )到一个( const A )。
将您的参数更改为此,它将起作用:
 A *const & handle
这是一个(引用 & )到一个(常量指针 *const )到一个( A )。
是否 A是否为 const 取决于您和您的代码的意图。
查看它在 Compiler Explorer 中工作.

关于c++ - 如何使用 RHS 上的引用指针重载 operator<<?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68476065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com