相关疑难解决方法(0)

现代C++的实验性功能是否可靠用于长期项目?

我有一个目前使用C++ 11/14的项目,但它需要类似的东西std::filesystem,它只在C++ 17中可用,因此我没有机会当前使用它.但是,我看到它在我当前的编译器中可用std::experimental::filesystem.使用实验性功能是一个好主意,假设我将来可以添加如下内容:

#ifdef CXX17 //if this is C++17
std::filesystem::something ...;
#else
std::experimental::filesystem::something ...;
#endif
Run Code Online (Sandbox Code Playgroud)

我担心的是:

1.是否保证所有兼容编译器具有相同的实验功能?

2.实验性特征是否容易发生重大变化,使其不可靠?

也许还有更多值得关注的事情.我为什么要或不应该使用它们?我对一个新项目感到困惑,不知道该决定什么.

c++ portability c++-standard-library c++11 c++17

84
推荐指数
4
解决办法
9305
查看次数

Boost文件系统和标准C++文件系统库有多相似?

我需要一个文件系统库,用于支持C++ 11的编译器或支持C++ 14的编译器 - 所以它不能来自C++ 17.

现在,我知道进入C++ 17的文件系统库是基于Boost :: Filesystem的; 但是 - 它们是否足够相似,我可以使用Boost库,然后在以后无缝切换到标准版本,而不会更改,比如using声明?或两者之间是否存在(轻微/重大)差异?我知道,对于这种情况variant,Boost和标准库版本有很大不同.

c++ c++-standard-library boost-filesystem c++11 c++17

24
推荐指数
2
解决办法
3998
查看次数

如果 p 以根路径开头,为什么 std::filesystem::path::append 替换当前路径

给出以下代码:

#include <iostream>
#include <filesystem>

namespace fs = std::filesystem;

int main()
{
    fs::path fsBase = "/base";
    fs::path fsAppend = "/append";
    auto fsResult = fsBase / fsAppend;

    std::cout << "fsResult: " << fsResult << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通常,预期的结果是/base/append,但它实际上给出了/append

fs::path::append的描述确实表明了这种行为:

如果 p.is_absolute() || (p.has_root_name() && p.root_name() != root_name()),然后用 p 替换当前路径,就像用 operator=(p) 并完成一样。

然而,行为std::experimental::filesystemboost::filesystem不同的是,这给了预期/base/append。请参阅示例

问题是为什么它会这样?为什么用append()函数替换路径?

c++ boost-filesystem c++17

5
推荐指数
1
解决办法
2125
查看次数

Visual Studio 2019 C++ 和 std::filesystem

现在,在“升级”到“更新”版本的编译器之后,我没想到会这样。

在 VS2017 中 std::filesystem 可通过 std::experimental::filesystem 获得,现在升级到 VS2019 后令我惊讶的是它根本不可用。不在 std::experimental 或 std::filesystem 中。

是的,我已经尝试从项目的设置中设置 c++17,甚至是“最新草案”的东西,有什么想法吗?

c++ visual-studio c++17 visual-studio-2019

4
推荐指数
2
解决办法
6142
查看次数