std::filesystem::recursive_directory_iterator::operator++, std::filesystem::recursive_directory_iterator::increment

来自cppreference.com
 
 
 
 
recursive_directory_iterator& operator++();
(1) (C++17 起)
recursive_directory_iterator& increment( std::error_code& ec );
(2) (C++17 起)

前进迭代器到下个条目。使所有 *this 的先前值的副本失效。

若当前被迭代目录没有剩下更多条目,则回撤迭代到父目录。若父目录亦无能迭代的兄弟条目,则重复此过程。若抵达已被递归迭代的目录层级的父目录(在 depth() == 0) 无可选择条目),则设置 *this 为尾迭代器。

否则,若 *this 代表目录,则若满足下列条件则迭代进入它:

  • disable_recursion_pending() 在此次自增前未被调用,即 recursion_pending() == true
  • 目录不是符号链接或启用跟随符号链接,即至少下列之一为 true:
    • !is_symlink((*this)->symlink_status())
    • (options() & directory_options::follow_directory_symlink) != directory_options::none)

参数

ec - 要存储错误状态的错误码

返回值

*this

异常

若内存分配失败,则任何不标记为 noexcept 的重载可能抛出 std::bad_alloc

1) 抛出 std::filesystem::filesystem_error,构造时以 OS 错误码为错误码实参。

若 OS API 调用失败,则 @2@ 设置 std::error_code& 形参

为 OS API 错误码,而未发生错误时则执行 ec.clear()

示例

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 3013 C++17 error_code 重载被标记为 noexcept 但能分配内存 移除 noexcept