operator<<,>>(std::filesystem::path)

来自cppreference.com
< cpp‎ | filesystem‎ | path
 
 
 
 
template< class CharT, class Traits >

friend std::basic_ostream<CharT,Traits>&

    operator<<( std::basic_ostream<CharT,Traits>& os, const path& p );
(1) (C++17 起)
template< class CharT, class Traits >

friend std::basic_istream<CharT,Traits>&

    operator>>( std::basic_istream<CharT,Traits>& is, path& p );
(2) (C++17 起)

进行路径 p 上的流输入或输出。使用 std::quoted ,使得之后从流输入运算符读取时空格不导致截断。

这些函数模板对通常无限定有限定查找不可见,而只能在 std::filesystem::path 为参数的关联类时由实参依赖查找找到。这在 using namespace std::filesystem; using 指令存在时阻止不想要的转换。

参数

os - 要进行输出的流
is - 要进行输入的流
p - 要插入或释出的路径

返回值

1) os
2) is

异常

可能抛出实现定义的异常。

可能的实现

版本一
template< class CharT, class Traits >
friend std::basic_ostream<CharT,Traits>&
    operator<<( std::basic_ostream<CharT,Traits>& os, const path& p )
{
    os << std::quoted(p.string<CharT,Traits>());
    return os;
}
版本二
template< class CharT, class Traits >
friend std::basic_istream<CharT,Traits>&
    operator>>( std::basic_istream<CharT,Traits>& is, path& p )
{
    std::basic_string<CharT, Traits> t;
    is >> std::quoted(t);
    p = t;
    return is;
}

示例

#include <iostream>
#include <filesystem>
int main()
{
    std::cout << std::filesystem::current_path() << '\n';
    std::cout << std::filesystem::temp_directory_path() << '\n';
}

可能的输出:

"/home/user"
"/tmp"

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR 应用于 出版时的行为 正确行为
LWG 2989 C++17 允许在 using 指令存在时插入任何能转换到 path 的表达式 使之为隐藏的友元