我有两个问题:
第一个问题:
我想创建一个类型的对象
std :: filesystem :: path
我希望不做任何改动就这样做,因为标准C 17允许这样做。
boost的优点是我们可以做到:
#include <boost / filesystem / path.hpp>
因此,它可以让您准确包含您想要的内容。
但是如果我在一开始就这样做:
#include <filesystem>
然后,在这种情况下,它在处理后的代码中包含了将不使用的大部分代码(但我不确定此声明)。
所以,我的第一个问题:是否可以仅包含C ++ 17标准的文件系统类“ path”?
我看过:
https://en.cppreference.com/w/cpp/header/filesystem
而且我不需要很多课程。我只需要“路径”。
如何在不涉及提升的情况下仅整合路径?
[我想,如果可能的话,C 17中的if文件系统会减少预处理后获得的代码?
谢谢
<filesystem>
比必须包含“全部” <boost/filesystem/path.hpp>
便宜,但是对其进行测量至少在我的机器上可获得令人惊讶的结果,对于<fileysystem>
:std::filesystem
仅包含$ echo '#include <filesystem>' | time -p g++ -std=c++17 -x c++ -c -
real 0.49
user 0.43
sys 0.05
:
<boost/filesystem/path.hpp>
因此包含$ echo '#include <boost/filesystem/path.hpp>' | time -p g++ -std=c++17 -x c++ -c -
real 0.89
user 0.81
sys 0.07
几乎是仅包含<filesystem>
的两倍。为了进一步巩固编译时间的增加可以归因于Boost实现而不是其他一些晦涩的原因,我检查了分别包含<boost/filesystem/path.hpp>
和<boost/filesystem/path.hpp>
而需要预处理的头文件的数量:] >
<filesystem>
相对:
$ echo '#include <boost/filesystem/path.hpp>' | g++ -std=c++17 -x c++ -M -c - | wc -l 407
我认为可以肯定地说,如果您担心的是编译时间,则不必担心包含
$ echo '#include <filesystem>' | g++ -std=c++17 -x c++ -M -c - | wc -l 144
。