为什么路径比较在最新的文件系统草案(C++)中区分大小写?

Pow*_*mer 6 c++ filesystems

引用编程语言 - C++ - 文件系统技术规范草案N4100:

8.4.8 pathcompare [path.compare]

1 int compare(const path&p)const noexcept;

2返回:如果*this的元素的native()在字典上比p的元素少于native(),则返回值小于0,否则如果*this的元素的native()在字典上更大,则值大于0比native()为p的元素,否则为0.

如果存在不区分大小写的文件系统(NTFS等),为什么将文件路径比较定义为区分大小写?不应该根据具体的文件系统规则进行比较吗?

doc*_*doc 2

equivalent()在 15.13 中还指定了附加函数,该函数检查两个路径是否解析为同一文件。

bool equivalent(const path& p1, const path& p2)
Run Code Online (Sandbox Code Playgroud)
  1. 返回:true,如果s1 == s2p1解析p2为同一文件系统实体,否则false。如果发生错误,ec 则返回带有参数的签名。false

compare()函数将使用迭代器并path::operator==比较元素。在 8.6.13 中你写道:

bool operator==(const path& lhs, const path& rhs) noexcept;
Run Code Online (Sandbox Code Playgroud)
  1. 等效性由 equal() 非成员函数确定,该函数确定两个路径是否解析为同一文件系统实体。因此,当两个路径解析为同一个文件时, equal("foo", "bar") 将为 true

  2. 希望确定两个路径是否“相同”的程序员必须确定“相同”是指“相同的表示形式”还是“解析为相同的实际文件”,并相应地选择适当的函数

因此,equivalent()比较是根据系统特定规则进行的,同时compare()检查您是否使用“相同的表示”来描述路径。

  • 恐怕 `equivalent()` 用于不同的事情:检查两个*已经存在的*路径是否指向同一物理位置(即检查两个符号链接是否指向同一位置)。 (5认同)