boost::filesystem::path 中的“/”字符有啥用?
Posted
技术标签:
【中文标题】boost::filesystem::path 中的“/”字符有啥用?【英文标题】:What is the use of the "/" character in boost::filesystem::path?boost::filesystem::path 中的“/”字符有什么用? 【发布时间】:2018-06-13 16:52:02 【问题描述】:我在 C++ 程序中遇到了这一行,但不明白“/”的使用方式或原因。有什么建议吗?
boost::filesystem::path pathLockFile = GetDataDir() / ".lock";
【问题讨论】:
操作员过载? en.cppreference.com/w/cpp/language/operatorsGetDataDir
听起来不像 Boost 中的函数——它不遵循它们的命名约定。您的哪个库定义了该功能?
你有所有的源代码,你为什么不阅读它或在调试器中单步调试它呢?另外,关于您的问题,请考虑a = b / c;
。
【参考方案1】:
这是一个简单的运算符重载案例。operator/
已为 path
类型的对象重载。
当您在 boost::filesystem::path
对象上使用 /
时,它会附加它们。
所以当你写的时候:boost::filesystem::path pathLockFile = GetDataDir() / ".lock";
它扩展为:boost::filesystem::path pathLockFile = boost::filesystem::path("/tmp/data") / ".lock";
假设GetDataDir()
在类似Unix/Linux 的环境中以boost::filesystem::path
的形式返回/tmp/data
。在类windows系统中,答案会有所不同。
这进一步扩展为:boost::filesystem::path pathLockFile = boost::filesystem::path("/tmp/data") / boost::filesystem::path(".lock");
最后你得到 pathLockFile
持有价值 /tmp/data/.lock
阅读来自Boost Filesystem and Path的文档
路径运算符/(const path& lhs, const path& rhs); 返回:路径(lhs)/= rhs。
路径附加 附加操作使用 operator/= 来表示它们在需要时附加平台首选目录分隔符的语义效果。 首选目录分隔符是实现定义的。
/(正斜杠)分隔符 => 适用于 unix 变体、Linux 和 Mac OS X\(反斜杠)分隔符 => 适用于类 windows实现
路径&运算符/=(常量路径&p); 返回:*this
【讨论】:
operator/
和 operator/=
是否等效且可互换?
@Åsmund 来自提升 documentation path operator/ (const path& lhs, const path& rhs);
Returns: path(lhs) /= rhs.
所以 /
在内部使用 /=
。不同之处在于/
返回一个新的path
对象,而/=
不返回一个新对象。所以它们在这个意义上是不可互换的。以上是关于boost::filesystem::path 中的“/”字符有啥用?的主要内容,如果未能解决你的问题,请参考以下文章
如何转换`boost :: filesystem :: path`和`QString`?
boost::filesystem::path::lexically_normal: 这是不正确的行为吗?
错误:'boost::filesystem::path::filename() const() + "/"' 中的'operator+' 不匹配
从'boost::filesystem3::path'到非标量类型'std::string'的提升错误转换
使用简单 Ls.cpp 的 C++ Boost 编译错误 - 未定义对 boost::filesystem::path::filename 的引用