operator<<,>>(std::filesystem::path)
来自cppreference.com
< cpp | filesystem | path
template< class CharT, class Traits > friend std::basic_ostream<CharT,Traits>& |
(1) | (C++17 起) |
template< class CharT, class Traits > friend std::basic_istream<CharT,Traits>& |
(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 的表达式
|
使之为隐藏的友元 |