我在此测试程序中VS2012 Update 4和VS2013 Update 1之间的行为有所不同:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <filesystem>
using namespace std;
using namespace std::tr2::sys;
void main()
{
string s("C:\\");
for (auto i = directory_iterator(path(s).parent_path()); i != directory_iterator(); ++i)
cout << (path(s).parent_path()/i->path()).string() << endl;
}
VS2012产生:
C:AUTOEXEC.BAT
...
VS2013产生:
C:C:AUTOEXEC.BAT
...
哪种行为符合C ++标准?
修改
由于filesystem
尚未使用C ++标准,但只是library proposal,我将重新提出一个问题:VS2013的行为是一个错误吗?
答案 0 :(得分:4)
我认为这是VC ++ 2012中的一个错误。以下摘自C++11/14 STL Features, Fixes, And Breaking Changes In VS 2013。
&lt; filesystem&gt;的directory_iterator也返回了路径 简短(DevDiv#411531)。 (注意recursive_directory_iterator有效 正确。)我们修改了directory_iterator以遵循N1975, Filesystem V2草案。 (Filesystem V3在我们的雷达上,但它不会 在2013 RTM实施。)
您可以找到N1975 here。