gpt4 book ai didi

c++ - 打印 unique_ptr 到 cout

转载 作者:可可西里 更新时间:2023-11-01 18:19:48 28 4
gpt4 key购买 nike

无法理解为什么会失败?

int *p = new int(10);
std::unique_ptr<int> ptr(p);
// Below line gives compilation error.
std::cout << "Value of ptr " << ptr << std::endl;
// Below line works well.
std::cout << "Value pointed ptr " << *ptr << std::endl;
std::cout << "Value of ptr->get() " << ptr.get() << std::endl;

我是这样理解的:

假设p的地址是100,新分配内存的地址是200。

p                new allocated memory
---------- ---------
200 10
---------- ---------
100 200


ptr
----------
200
----------
300

在上面的描述中,unique_ptr 指向新分配的内存本身,避免了 'p'。那么,打印“ptr”不应该给我 200 吗?

最佳答案

std::unique_ptr<int> ptr(p);
// Below line gives compilation error.
std::cout << "Value of ptr " << ptr << std::endl;

为了能够使用通常的 <<使用 cout 打印某个类的对象的语法, 必须有适当的重载 operator<<实现。

例如,如果你有一个类 X,如果你想启用 cout << x语法,你可以重载 operator<<像这样:

#include <ostream> // for std::ostream

std::ostream& operator<<(std::ostream& os, const X& x)
{
// Implement your output logic for 'x'
...

return os;
}

C++ 标准库设计者选择不为 std::unique_ptr 实现这样的重载;这就是当您尝试使用 << 时出现编译错误的原因与 unique_ptr 的实例

关于c++ - 打印 unique_ptr 到 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42135260/

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