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

时间:2017-03-22 13:09:42

标签: 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;
}

因此第一个点元素不被视为冗余。但是,test./test在使用boost文件系统时显然会解析为同一个文件,因此这似乎与我不一致。这是预期的行为吗?

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

1 个答案:

答案 0 :(得分:1)

这是合理的行为,因为虽然你是对的,test./test通常指的是同一件事,但在所有地方都不是这样。

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

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