boost :: filesystem :: path :: lexically_normal:这是不正确的行为吗?

Ton*_*vel 7 c++ boost

boost::filesystem::path::lexically_normal()各州的文件:

返回*this冗余当前目录(点),父目录(点 - 点)和目录分隔符元素已删除.

请参阅:http://www.boost.org/doc/libs/1_63_0/libs/filesystem/doc/reference.html.

以下打印./test(使用Boost 1.63.0)我期望test:

#include <boost/filesystem/path.hpp>
#include <iostream>

int main(void)
{
   std::cout << boost::filesystem::path{"./test"}.lexically_normal().string() << "\n";
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以第一个点元素不算冗余.然而,无论test./test使用提高文件系统时,显然解析为同一个文件,所以这似乎不一致给我.这是预期的行为吗?

更新:C++ 17文件系统库"test"按预期返回(GCC 8.2.0,Linux).

Joh*_*nck 2

这是合理的行为,因为虽然你是对的test,并且./test通常指的是同一件事,但并非到处都是这种情况。

例如,如果您./test在 shell 中作为命令运行,它将始终在当前目录中查找该程序,而不是在其他地方。但如果您运行它,test它将在运行时路径(例如$PATH)中查找。

因此,是否test./test引用同一个文件实际上是依赖于上下文的——因此这./并不是多余的。