boost :: filesystem :: path使用operator / =更改基本变量

时间:2017-09-03 19:26:10

标签: c++ boost

我有一个存储多个文件的目录。

e.g。 C:\测试\
内容:test.txt,info.txt,dir2 /

使用boost::system::filepath时,可以将系统路径分隔符与运算符/=+=一起使用。
这两个函数都改变了基本变量 - 使用临时变量似乎有些开销,我想知道我是否忘记了某种满足我需要的运算符或函数。

例如

boost::filesystem::path pathTmp = boost::filesystem::current_path(); // imagine this returns C:\test
function1( pathTmp /= "test.txt" ); // this would call the function1 with "C:\test\test.txt" but also modify pathTmp

在此函数1调用之后,我需要删除文件名以返回目录并使用下一个文件名再次调用该函数。或者我制作pathTmp的临时副本,并将此临时副本重新分配给pathTmp并从那里开始:

boost::filesystem::path pathCopy = pathTmp = boost::filesystem::current_path(); // imagine this returns C:\test
function1( pathTmp /= "test.txt" ); // this would call the function1 with "C:\test\test.txt" but also modify pathTmp
pathTmp = pathCopy;
function1( pathTmp /= "info.txt" );

我想知道我是否忘记了使用正确的分隔符向路径添加文件名的某种功能,而无需临时副本或昂贵的调用来再次删除文件名。

2 个答案:

答案 0 :(得分:2)

运算符/=更改了我所知道的所有编程语言的左侧(包括但不限于C,C ##,C ++)。

一般来说:

 x += y; // is equivalent to x = x + y; 
 x -= y; // is equivalent to x = x - y; 
 x /= y; // is equivalent to x = x / y; 
 x *= y; // is equivalent to x = x * y; 
 x &= y; // is equivalent to x = x & y; 
 x |= y; // is equivalent to x = x | y; 
 x ^= y; // is equivalent to x = x ^ y; 
 x %= y; // is equivalent to x = x % y; 

答案 1 :(得分:-1)

正如@cpplearner在对我的问题的评论中回答的那样,我引用了他并将其标记为答案

  

只需使用operator /? - cpplearner