C++ boost中path::string()和path::generic_string()之间的区别是什么?

C++ boost中path::string()和path::generic_string()之间的区别是什么?,c++,boost,C++,Boost,boost::path::string()和boost::path::generic_string()之间有什么区别,我应该在什么时候使用它们?中明确说明了这一点;您只需阅读文档即可获得知识和理解。请养成这样做的习惯,从现在开始 boost::path::string 返回中的std::string boost::path::generic\u字符串 返回中的std::string 什么时候使用它们 好吧,这取决于你,取决于你的需要!以下引用,同样来自文档,可能会有帮助 [注意:对于ISO/IE

boost::path::string()
boost::path::generic_string()
之间有什么区别,我应该在什么时候使用它们?

中明确说明了这一点;您只需阅读文档即可获得知识和理解。请养成这样做的习惯,从现在开始

boost::path::string 返回中的
std::string

boost::path::generic\u字符串 返回中的
std::string

什么时候使用它们 好吧,这取决于你,取决于你的需要!以下引用,同样来自文档,可能会有帮助

[注意:对于ISO/IEC 9945,不会发生转换,因为本机格式和通用格式相同。对于Windows,反斜杠转换为斜杠--结束说明]

在日常使用中,您可以有效地说:

  • 在Windows上,本机格式有反斜杠,通用格式有斜杠
  • 在Linux上,两种格式都有斜杠

读懂你的心思,你正在Windows系统上编程

在您的系统上,据boost所知,路径元素之间的首选分隔符是
\
。但是,
/
是可接受的分隔符

boost::fs::path
docs的构造函数状态:

[注:对于ISO/IEC 9945和Windows实施,通用格式已经可以接受为本机格式,因此不执行通用到本机的转换。--结束注]

注意关于Windows实现的条款——通用格式(带有
/
分隔符)已经可以接受,因此不进行转换

然后,当您调用
t/fn
时,将使用
追加
/
/=
运算符。它说:

[注:对于类似ISO/IEC 9945的实施,包括Unix变体、Linux、, 在Mac OS X中,首选的目录分隔符是单正斜杠

对于类似Windows的实现,包括Cygwin和MinGW,首选的目录分隔符是单个反斜杠。--结束说明]

在windows系统上,首选的分隔符是
\

因此,在构造时,不会发生从泛型到系统的转换——但在附加
操作符/
或类似内容时,它是

这会导致您的字符串看起来很难看

如果要解决此问题,可以使用
begin
end
对“格式错误”的路径进行迭代,并使用
操作符/
将元素存储/附加到新路径中

boost::fs::path fix( boost::fs::path in ) {
  boost::fs::path retval;
  for ( auto element : in ) {
    if (retval.empty())
      retval = in;
    else
      retval /= in;
  }
  return retval;
}
如果我正确阅读文档,它将采用你的混合斜杠路径,并生成一个干净的斜杠路径


如果您卡在C++03中,请使用
in.begin()
in.end()
boost::fs::path::iterator

在阅读每个函数的文档时发现了什么?我找不到文档@男人是认真的。不到3个小时前,我说了完全一样的话。当你要求别人做所有的阅读时,你不可能成为一名程序员。@Lightness当一个热心的程序员或专业的程序员问这个问题时,不清楚他们会问什么。显然,任何能够上网的热心人士或专业程序员都可以用谷歌搜索这些文档:因此,这些文档公然提供的答案不可能是热心人士或专业程序员想要知道的。除去这一点,我们很不清楚人们在问什么P(如果是C++标准的DOC,旁边没有人可以读到它并理解它(有时甚至不是作者):但是链接的文档不是那么钝)谢谢。它们中是否有任何一个返回带有“”的路径?因此,如果路径有空间,它可以直接用于传递给其他命令?许多命令会像这样进行字符串化,IIRC(
outstream)声明“这在文档中有明确说明”这是一个巨大的夸大。它一点也不清楚。Boost文件系统文档就是一个如何不编写文档的例子。@Zbyl:如果你只需点击我在回答的第一句中提供的链接,你就会直接看到对区别的一个非常清楚的解释。我不是说Boost。文件系统有最好的文档但它确实包含了这个问题的答案,并且OP显示了零研究努力(这在当时是他们的一个连续习惯)。