跳到主要内容

std::unique_ptr<T,Deleter>::operator<<

声明

自 C++20 起
template< class CharT, class Traits, class Y, class D >
std::basic_ostream<CharT, Traits>& operator<<( std::basic_ostream<CharT, Traits>& os,
const std::unique_ptr<Y, D>& p );

p 管理的指针的值插入到输出流 os 中。

等价于 os << p.get()

仅当 os << p.get() 是一个有效表达式时,此重载才参与重载解析。

参数

os - 要将 p 插入其中的 std::basic_ostream p - 要插入 os 中的指针

返回值

os

备注

如果 std::unique_ptr<Y, D>::pointer 是指向字符类型的指针(例如,当 Ycharchar[]CharT 时),这可能会调用针对空终止字符字符串的 operator<< 重载(如果指针实际上不指向此类字符串,则会导致未定义行为),而不是打印指针值本身的重载。

示例

#include <iostream>
#include <memory>

class Foo {};

int main()
{
auto p = std::make_unique<Foo>();
std::cout
<< p << '\n';
std::cout
<< p.get() << '\n';
}
可能结果
0x6d9028
0x6d9028

std::unique_ptr<T,Deleter>::operator<<

声明

自 C++20 起
template< class CharT, class Traits, class Y, class D >
std::basic_ostream<CharT, Traits>& operator<<( std::basic_ostream<CharT, Traits>& os,
const std::unique_ptr<Y, D>& p );

p 管理的指针的值插入到输出流 os 中。

等价于 os << p.get()

仅当 os << p.get() 是一个有效表达式时,此重载才参与重载解析。

参数

os - 要将 p 插入其中的 std::basic_ostream p - 要插入 os 中的指针

返回值

os

备注

如果 std::unique_ptr<Y, D>::pointer 是指向字符类型的指针(例如,当 Ycharchar[]CharT 时),这可能会调用针对空终止字符字符串的 operator<< 重载(如果指针实际上不指向此类字符串,则会导致未定义行为),而不是打印指针值本身的重载。

示例

#include <iostream>
#include <memory>

class Foo {};

int main()
{
auto p = std::make_unique<Foo>();
std::cout
<< p << '\n';
std::cout
<< p.get() << '\n';
}
可能结果
0x6d9028
0x6d9028