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

 
 
 
 
recursive_directory_iterator& operator++();
(C++17 起)
recursive_directory_iterator& increment( std::error_code& ec );
(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

异常

不接受 std::error_code& 参数的重载在底层 OS API 错误时抛出 filesystem_error ,以作为错误码参数的 OS 错误码构造。若 OS API 调用失败,则接受 std::error_code& 参数的重载设置该参数为 OS API 错误码,而若不出现错误则执行 ec.clear() 。若内存分配失败,则任何不标记为 noexcept 的重载可能抛出 std::bad_alloc

缺陷报告

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

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